我正在使用joutery ui制表符的knockout.js自定义绑定。我创建了一个示例小提琴
http://jsbin.com/ikidiw/7/edit
这里我试图通过allBindingsAccessor在自定义绑定中设置当前模型对象的currentSelectedTab属性。但是获得模型obejct的错误没有currentSelectedTab函数。问题是什么?
答案 0 :(得分:4)
根据http://knockoutjs.com/documentation/custom-bindings.html,init函数的签名如下:
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext)
这里viewModel是传递给ko.applyBindings的模型对象。因此,在init函数参数中的allBindingsAccessor之后添加viewModel参数后,可以通过以下方式更改代码:
而不是
allBindingsAccessor().currentSelectedTab(ui.index);
你可以写
viewModel.currentSelectedTab(ui.index);
答案 1 :(得分:2)
如果要访问当前模型,则需要使用第四个参数扩展init函数,该参数将是当前视图模型对象(see the documentation):
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var options = ko.utils.unwrapObservable(valueAccessor() || {});
options.select = function (event, ui) {
viewModel.currentSelectedTab(ui.index);
};
$(element).tabs(options);
}
您可以尝试一下:http://jsbin.com/uwajus/1/edit
答案 2 :(得分:1)
我认为问题似乎是你试图通过viewmodel名称而不是绑定访问器指针来访问该值。
你可以尝试一下:
HTML
<div id="ccftabs" class="uitab" data-bind="tab : { selected : currentSelectedTab }">
在Javascript中
var options = ko.utils.unwrapObservable(valueAccessor() || {});
options.select = function (event, ui) {
options.selected(ui.index);
};
$(element).tabs(options);
我认为这是一个很好的方法。