jQuery.combobox和Knockout JS - 变量选择器不会被触发

时间:2011-11-17 17:53:01

标签: jquery json knockout.js

我正在将Knockout JS与jQuery的这个组合框扩展结合使用:http://source.dellsala.com/jquery-combobox/demo/

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

 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');

所以我认为这是组合框插件的一个问题。问题是,我真的想在查看几个后使用这个特定的组合框插件。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

有关详细信息,请参阅http://knockoutjs.com/documentation/custom-bindings.html

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

答案 1 :(得分:0)

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