Knockout.js - 在一个绑定访问可观察,而不仅仅是它的值

时间:2013-03-11 18:27:26

标签: binding knockout.js

我有以下自定义绑定

ko.bindingHandlers.dialogFor = {
    init: function(el, valueAccessor) {
        $(el).dialog();
        var val = valueAccessor();
        if(ko.isObservable(val))
            $(el).on('dialogclose', function(){ 
                val(null) 
            }); 
    }
};

这允许我使用dialogFor绑定标记html片段,并通过设置observables打开对话框。

不幸的是,传入的值总是被解包,因此if检查永远不会通过,并且在关闭对话框时重置observable不起作用。

如何获得传递的实际可​​观察​​量,而不仅仅是未包装的值?

1 个答案:

答案 0 :(得分:1)

我无法看到你的HTML这样的猜测,我认为你在自定义绑定的值中使用了observable,如:

   <div data-bind="dialogFor: val()"></div>

如果是,那么你已经解开了值而且只有值而不是observable传递给你的自定义绑定,所以这就是你的if条件失败的原因。你应该像以下一样使用它:

   <div data-bind="dialogFor: val"></div>

我创建了一个working example,其中jquery ui对话状态由observable控制。