3

我有以下自定义绑定

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

dialogFor这使我可以简单地通过设置 observables来标记带有绑定和打开对话框的 html 片段。

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

如何获得传递的实际 observable,而不仅仅是展开的值?

4

1 回答 1

1

我看不到您的 HTML,所以这是一个猜测,我认为您在自定义绑定的值中使用了 observable,例如:

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

如果是,则您已经解开该值,并且只有不是可观察值的值传递给您的自定义绑定,所以这就是您的 if 条件失败的原因。您应该像这样使用它:

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

我创建了一个工作示例,其中 jquery ui 对话框状态由 observable 控制。

于 2013-03-11T19:39:14.170 回答