KnockoutJS,映射插件,在模型更改时收到通知?

时间:2013-10-03 12:31:01

标签: javascript knockout.js knockout-mapping-plugin

我以下列方式使用knockoutJS:

var messagesFromServer = getJSONData().messages; //this get msgs from server
ko.mapping.fromJS(messagesFromServer, {}, myobject.viewModel.Messages);

然后我基本上每三秒钟调用一次来更新html表,它工作正常,如果从服务器找到新数据,则添加新行。现在我想在实际发生变化时添加自定义回调,例如在找到新消息时。

我该如何实现?

感谢adv,

-hk

2 个答案:

答案 0 :(得分:0)

您可以将两个对象转换为json,然后将它们与json字符串进行比较。

var messagesFromServer = getJSONData().messages; //this get msgs from server
var newString = ko.toJSON(messagesFromServer);
var oldString = ko.toJSON(myobject.viewModel.Messages);
if(newString != oldString ) {
 // something new
}

ko.mapping.fromJS(messagesFromServer, {}, myobject.viewModel.Messages);

See ko.toJSON doc

我希望它有所帮助。

答案 1 :(得分:0)

如果messages是数组,您可以使用ko.utils.compareArrays检测更改并自行引发自定义事件。以下是比较ko.observableArray()的代码示例。寻找Comparing two arrays