我有一个带有一些文本框和下拉列表的knockout.js的视图。
当用户更改值时,我知道使用$ post
保存数据为此我创建了一些像
这样的计算机 self.subjectChanged ko.computed(function () {
var subject self.subject();
//save...
但是当主题从数据库加载并首次设置时,这也会触发。 这是什么最好的做法?
类似的问题是我有一个函数getdata(),它取决于两个属性。 现在加载时,此方法会被引发两次(对于每个属性)
处理此问题的最佳做法是什么?
答案 0 :(得分:1)
这样做的一种方法是加载页面并正常绑定数据,然后使用订阅来监视对您感兴趣的可观察对象的更改。 http://knockoutjs.com/documentation/observables.html#explicitly-subscribing-to-observables
viewModel.subject.subscribe(function(newValue) {
// code you want to run when the value changes...
});
答案 1 :(得分:0)
这可能不是最佳做法,但在过去我将一个加载的变量绑定到vm,当数据从服务器加载完毕后我将其设置为true;
在我的计算机中,我将围绕实际完成工作的代码,如果检查已加载。计算机可能有点棘手,你可能需要引用if之外的observable来确保它们正确触发。
com = ko.computed(function(){
if(loaded){
var subject = self.subject();
}
// reference observable outside of if to ensure the computed fires when the observable changes
self.subject();
});