错误与最新的基因敲除和jQuery用户界面对话框:不能事先打电话初始化(Error with lat

2019-10-17 16:23发布

我尝试用基因敲除2.2自定义绑定新的jQuery 1.9和jQuery UI的1.9.2使用。 代码是从这里: 整合与knockoutjs jQuery UI的对话有了更新的库: http://jsfiddle.net/SnPdE/323/

ko.bindingHandlers.dialog = {
        init: function(element, valueAccessor, allBindingsAccessor) {
            var options = ko.utils.unwrapObservable(valueAccessor()) || {};
            //do in a setTimeout, so the applyBindings doesn't bind twice from element being copied and moved to bottom
            setTimeout(function() { 
                options.close = function() {
                    allBindingsAccessor().dialogVisible(false);                        
                };

                $(element).dialog(options);          
            }, 0);

            //handle disposal (not strictly necessary in this scenario)
             ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
                 $(element).dialog("destroy");
             });   
        },
        update: function(element, valueAccessor, allBindingsAccessor) {
             var shouldBeOpen = ko.utils.unwrapObservable(allBindingsAccessor().dialogVisible);
             $(element).dialog(shouldBeOpen ? "open" : "close");

        }
};


var viewModel = {
    label: ko.observable('dialog test'),
    isOpen: ko.observable(false),
    open: function() {
       this.isOpen(true);   
    },
    close: function() {
       this.isOpen(false);   
    }
};

ko.applyBindings(viewModel);

问题是错误:错误:不能调用在初始化之前对话框的方法; 试图调用方法“关闭”

如果我删除的setTimeout - applyBindings被applyed到对话框两次。

Answer 1:

检查是否对话框被调用之前初始化open将修复它。

if ($(element).data('dialog')) {
    $(element).dialog(shouldBeOpen ? "open" : "close");
}

最初的update不要求所有的,因为对话将在初始化过程中被打开,如果autoOpentrue ,这是默认的。

编辑:
是正确的,当dialogVisible最初是false的改变提出,要设置autoOpen选项。

...
options.autoOpen = ko.utils.unwrapObservable(allBindingsAccessor().dialogVisible);
$(element).dialog(options); 


文章来源: Error with latest knockout and jquery ui dialog: cannot call prior to initialization