Knockout计算与自定义绑定计算顺序

时间:2016-10-21 10:38:59

标签: javascript knockout.js computed-observable

我定义了一个自定义绑定,它改变了一个可观察的属性,让我们说customProperty。 (例如):

ko.bindingHandlers.customBinding = {
    update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        //computes some value depending on observable value
        //...
        valueAccessor().customProperty = someValue;
    }
};

我还有一个计算的observable触发我的customBinded observable,我需要更新customProperty的值。 事实证明,在自定义绑定中进行日志记录,并且在计算的代码中计算出的值是在customBinding之前计算的,因此它会读取旧的customProperty值。

我是否可以指定绑定优先于计算,或者是否有一些解决方法可以实现计算到"等待"自定义绑定?

1 个答案:

答案 0 :(得分:0)

您可以使用Rate-limiting observable notifications来延迟计算的observable的执行。 e.g。

viewModel.computed = ko.computed(function() {
  var input = viewModel.input();
  return viewModel.input.customProperty + ' ' + input;
}).extend({rateLimit: 10 });

稍微延迟将允许绑定在计算的observable之前执行。请参阅此JSFiddle example进行演示。