我有一个简单的模型来保存我的文件夹:
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 中没有得到什么?我在想,当可观察数组元素被修改时,如果它被数据绑定到某些东西,那么某些东西也会被修改。