我正在将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');
所以我认为这是组合框插件的一个问题。问题是,我真的想在查看几个后使用这个特定的组合框插件。
有什么想法吗?谢谢!
答案 0 :(得分:0)
您缺少处理程序的更新部分。这是当绑定变量的值更改值时调用的部分。
$(元素)不起作用是意料之外的。我在所有自定义绑定中使用它,它工作正常。
有关详细信息,请参阅http://knockoutjs.com/documentation/custom-bindings.html。
你能创建一个jsfiddle演示,这样我们就可以看到发生了什么,然后提供修复。
答案 1 :(得分:0)
解决它:你不能动态触发某些插件(在Knockout之外),直到你对绑定元素应用绑定。必须是KO在应用绑定之前不会将元素注册到DOM。