如何在自定义绑定淘汰中访问模型属性

时间:2012-10-24 06:54:13

标签: javascript jquery knockout.js

我正在使用joutery ui制表符的knockout.js自定义绑定。我创建了一个示例小提琴

http://jsbin.com/ikidiw/7/edit

这里我试图通过allBindingsAccessor在自定义绑定中设置当前模型对象的currentSelectedTab属性。但是获得模型obejct的错误没有currentSelectedTab函数。问题是什么?

3 个答案:

答案 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);

我认为这是一个很好的方法。