这是一个两部分问题。
首先,我在模板绑定上使用了一个后跟器,以便在每次模板呈现新数据时完成一个动作。这工作正常......除了它工作得太正确。除非添加或删除数据,否则不会触发。
其次,为了解决第一个“问题”,我认为我需要编写自定义“更新”并检测数据是否已更改。这也是有道理的,但是我意识到映射中的更新功能也遵循“仅在添加或删除数据时才运行”的想法。
然后我想我需要围绕映射模型的一个特定属性进行更新,如:
var dataMappingOptions = {
key: function(data) {
return data.id;
},
create: function(options) {
return new Person(options.data);
},
update: function(options) {
// if first changed, doSomething();
return options.target;
},
'first': {
update: function(options) {
// if first changed, doSomething();
return options.target.first;
}
}
};
但这只会变成一团糟,甚至无法发挥作用。
如果你想查看它,这是FIDDLE。
长话短说,我确信必须有一种方式来订阅属性,因为它正在更新?我想也许你只需要制作计算机可观察量?我打算把它扔到那里看看Ryan是否想要教我,因为他已经这么多次了:)。
答案 0 :(得分:2)
你可以解释一下你是否想要完成一些不同的事情,但这就是我将如何处理它:
我会使用手动订阅firstName
并在那里执行我的操作。我会在您的Person
构造函数中设置此订阅。
类似的东西:
var Person = function(data) {
this.id = data.id;
this.first = ko.observable(data.first);
this.last = ko.observable(data.last);
this.full = ko.computed(function() {
return this.first() + " " + this.last();
}, this);
this.first.subscribe(function(newValue) {
alert(this.full() + " had his/her first name changed");
}, this);
};
就像这个样本:http://jsfiddle.net/rniemeyer/EDC7q/
这会足够吗?当值发生变化时,您想采取什么类型的行动?