为什么我无法在此自定义绑定中获取当前viewModel?

时间:2012-01-06 17:20:25

标签: javascript knockout.js

这是包含我的绑定的.haml代码。我删除了那些不相关的绑定。

#date-extension
  .filter-extension-container
    .filter-extension-button
      .button-close
    #hand-graph-container{"data-bind" => "with:dateGraph"}
      #x-axis
      #hand-graph{"data-bind" => "foreach: {data:graphData}"}
        %div{"data-bind" => "interactiveBar: $data"}

我有一个自定义绑定的开头,就像这样。

ko.bindingHandlers.interactiveBar = {
  init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
debugger;
  },
  update: function(element, valueAccessor, allBindingsAccessor, viewModel) {

  }
};

但是当我查看viewModel时,它等于valueAccessor并且只是我传入的数据对象。我想访问dateGraph viewModel,并且应该能够访问它因为我使用了" with:graphData"根据文件。

1 个答案:

答案 0 :(得分:6)

foreach内部viewModel属性是在该范围级别绑定的数据。

有几种选择(假设您使用的是Knockout 2.0):

  • 通过$parent代替$data并通过dateGraph

  • 访问您的valueAccessor()对象
  • 或绑定处理程序的第5个参数实际上是绑定上下文。绑定上下文将具有$data$parent$parents$root属性。您可以看到属性here的说明。