【发布时间】:2012-07-08 01:38:47
【问题描述】:
如何获取下一个对象的更改事件?
$(function () {
var Data = {
id: ko.observable(15),
name: ko.observable('my name'),
status: ko.observable('status')
}
var ClickCounterViewModel = function () {
var me = this;
me.Model = ko.observable(Data);
me.change = ko.computed(function () {
var m = me.Model();
console.log(m.status());
});
};
ko.applyBindings(new ClickCounterViewModel());
});
我从以下位置获取对象数据:
ko.mapping(AnyInitData, {}, Data);
模型的所有属性都是可观察的,但如果有任何值被改变,我想知道这一点。 可以通过 ko.computed 做,但是我有很多属性,不会做。
如果状态改变,控制台的这个示例输出只有“状态”,但如果属性“名称”改变,则什么也不做。
对不起,我的英语不好。
【问题讨论】:
-
您想如何知道属性是否已更改?尝试在这里查看“显式订阅可观察对象”部分KO docs 无论如何 ko.mapping 将所有属性转换为可观察对象,因此您不必先声明数据。
-
我知道做ko.mapping,你是对的。我有一个对象 Data = {very much property},如果有任何属性被更改,我不会收到更改事件。只有它。我可以制作 ko.computed 并在其中制作对象的每个属性,但这并不优雅。
-
可能你没有仔细看我之前评论的链接但是你可以使用这个功能:
myViewModel.personName.subscribe(function(newValue) { alert("The person's new name is " + newValue); });但是你必须为每个属性都这样做...... -
对不起,'订阅'总比没有好。现在,我没有举例说明“订阅”如何与“ko.mapping”一起使用。但我会探索它。并将添加有关结果的帖子。思考。
标签: knockout.js knockout-mapping-plugin