1

我正在为 jquery ui 选项卡使用 knockout.js 自定义绑定。我创建了一个示例小提琴

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

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

4

3 回答 3

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);
于 2012-10-24T07:55:57.170 回答
2

如果您想访问当前模型,您需要使用第四个参数扩展您的 init 函数,该参数将是当前视图模型对象(请参阅文档):

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

于 2012-10-24T07:56:01.383 回答
1

我认为问题似乎是您试图通过视图模型名称而不是绑定访问器指针来访问值。

你可以试试:
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);

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

于 2012-10-24T08:04:29.947 回答