knockout.js阻止了第一次价值变动

时间:2014-06-12 19:35:39

标签: javascript knockout.js

我有一个带有一些文本框和下拉列表的knockout.js的视图。

当用户更改值时,我知道使用$ post

保存数据

为此我创建了一些像

这样的计算机
   self.subjectChanged ko.computed(function () {

        var subject self.subject();
//save...

但是当主题从数据库加载并首次设置时,这也会触发。 这是什么最好的做法?

类似的问题是我有一个函数getdata(),它取决于两个属性。 现在加载时,此方法会被引发两次(对于每个属性)

处理此问题的最佳做法是什么?

2 个答案:

答案 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...
});

例如http://jsfiddle.net/m8mb5/

答案 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();
});