2011-11-17 74 views
0

我结合使用JS淘汰赛与此组合框扩展jQuery的:http://source.dellsala.com/jquery-combobox/demo/jQuery.combobox和淘汰赛JS - 变量选择不点火

我有一个自定义绑定事件,当视图模型初始化:

ko.bindingHandlers.dataOptions = { 
       init: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
        var id = ko.utils.unwrapObservable(valueAccessor()); 
        var vm = viewModel; 
        var data = vm.Options(); 
        var objArray = new Array(); 
        $.each(data, function (i) { 
         var obj = new gv.objectType(data[i].attributeId(), data[i].Name()); 
         objArray.push(obj); 
        }); 

        var sel = '#' + vm.Id(); 
        $(sel).combobox(objArray); 
        //$(element) didn't work as a selector. 
        //Only the actual string selector works: $('#someid') 
       } 
      }; 

对于一些疯狂的原因,我不能为了使用$(元素)或动态选择器(基于变量)来生成组合框:

$(element).combobox(objArray); 

然而,如果我直接输入字符串选择器:

$('#myId').combobox(objArray); 

它工作正常。同时,任何标准的jQuery方法很好地工作动态选择:

$(element).val('hello world'); 

所以我觉得这是与组合框插件的问题。事情是,我真的想在查看几个后使用这个特定的组合框插件。

任何想法?谢谢!

回答

0

解决了它:您不能动态地触发某个插件(在Knockout之外),直到您将绑定应用到挖空元素。它必须是在应用绑定之前KO不会将元素注册到DOM。

0

您缺少处理程序的更新部分。这是绑定变量的值更改值时调用的部分。

$(元素)不起作用是意外的。我在我所有的自定义绑定中使用它,它工作正常。

有关全部细节,请参阅http://knockoutjs.com/documentation/custom-bindings.html

你可以创建一个jsfiddle演示,以便我们可以看到发生了什么,然后提供修复。

+0

解决了它:在应用绑定之前,您无法动态触发某个插件。我已经尝试过更新部分,没有喜悦。上面的答案为我做了。 –