質問編集履歴

1 一部修正

imamura

imamura score 123

2015/06/03 15:52  投稿

ko.observableArray のデータの入れ替え
配列を格納してる ko.observableArray のデータをjavascriptのコマンド「splice」で入れ替えをしました。
```lang-coffeescript
index2 = index1 - 1
data1 = parent.list()[index1]
data2 = parent.list()[index2]
parent.list().splice index1,1,data2
parent.list().splice index2,1,data1
```
内部的には入れ替わっていることは確認しましたが、
表示上は並び替えが行われていません。
http://kojs.sukobuto.com/docs/observableArrays
> 2.push や splice などの配列の要素を操作する関数において、 Knockout のメソッドは依存トラッキングメカニズムを自動的に引き起こすため、 すべての登録されたリスナに対して変更が通知され、UI が自動更新されます。
とありますが、入れ替えには対応していないのかもしれません。
ディープコピーだと書き換わったとあったのですが、試した所変化無しでした。
http://qiita.com/ashikawa/items/c01c512722d4d74bf83a
> // しかたないからディープコピー
ob.splice(idx, 1, $.extend(true, {}, b));
> ob.splice(idx, 1, $.extend(true, {}, b));
入れ替えた部分だけdomが書き換わってくれると理想ですが、
あるいはforeachで処理している部分を再描画する方法があればと考えています。
よろしくお願いします。
  • JavaScript

    19308 questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Knockout.js

    48 questions

    KnockoutJSは、Model-ViewView-Model(MVVM)を用いたダイナミックなHTML ULのためのオープンソースのJavaScriptライブラリです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る