我有一个视图模型每隔几秒由json请求填充。当文本发生变化时,Knockoutjs触发函数
viewModel = ko.mapping.fromJS([]);
...
getJSON(){
...
ko.mapping.fromJS(data,viewModel);
}
然后我在HTML中有一些文本绑定。
<div id="mainContainer" data-bind='foreach: viewModel'>
<span data-bind='text: name()'></span>
<!-- ko foreach: items() -->
<span data-bind='text: value()'></span>
<!-- /ko -->
</div>
通常,这些值每1-2分钟更改一次。 但是,每读取一次JSON,模型都会'更新',并认为所有值都是'新'。所以我不能使用'更新'。 假设我想在这个值真的发生变化时做点什么。例如,有2秒的绿色边框。有没有一种方法可以在每次更新模型时评估这些值,并检查每个旧值是否与新值不同?
另一个问题是我得到的数据是一个内部有对象的数组。 [{name:'name1',items:[{},{}]},{name:'name2',items:[{},{}]},...]
因此, mapping.fromJS(data),返回[] !! 只好用 ko.mapping.fromJS(data, {}, viewModel);
,但我不知道这是否是一样的...
什么嵌套的对象?似乎没有在那里工作... – AntouanK
我用嵌套映射的例子更新了我的答案,并通过jsfiddle链接到了一个工作示例 – Christoffer