フォルダを保持するための単純なモデルがあります。
var FolderModel = {
folders: ko.observableArray([
{id:'Global', uid: 'Global', name: 'Global', count:0},
{id:'New', uid: 'New', name: 'New', count:0},
{id:'Important', uid: 'Important', name: 'Important', count:0}
]);
このモデルは以下にバインドされています:
<ul class="folder-tree" data-bind="foreach: FolderModel.folders">
<li>
<span data-bind="text: $data.name"></span>
<span class="count" data-bind="text: $data.count"></span>
</li>
</ul>
したがって、最初のビューは次のようになります。
- グローバル(0)
- 新規(0)
- 重要(0)
次に、別のスクリプトでリクエストポーリングを実行しています。カウントが変更され、モデルが更新されるのを待っています。それでも、私がしたことは何もうまくいきませんでした。私が試してみました:
var match = ko.utils.arrayFirst(FolderModel.folders(), function (item) {
return c == item.uid;
});
if (match) {
match.count = counts[c];
}
c-これがフォルダのuidです。そこで、arrayFirstを使用して、監視可能な配列内のアイテムを取得し、更新します。
私が試した次のこと:
$.each(FolderModel.folders(), function (index, folder) {
var newFolder = FolderModel.folders()[index];
newFolder.count = counts[folder.uid];
FolderModel.folders.replace(FolderModel.folders()[index], newFolder);
});
これも私をどこにも連れて行かず、かなりばかげているように見えますが、これは別のSOの問題で見つかりました。knockoutjsで特定のインデックス要素を置き換える方法
何が間違っているのでしょうか。また、knockout.jsで何ができなかったのでしょうか。observable array要素が変更されると、それが何かにデータバインドされると、何かも変更されると思っていました。