淘汰赛无法处理绑定 - 未定义

May*_*tBe 5 knockout.js

我继承了一个使用 Knockout 的项目^3.1.0。我需要构建一些功能。我从来没有使用过淘汰赛。

每个视图都有一个视图模型,该视图模型是通过主视图模型调用的init(model)

这些属性在 init 开始时初始化并在视图中使用,没有任何问题。例如:

model.entities = ko.observableArray([]);
model.hasEntities = ko.observable(false);
Run Code Online (Sandbox Code Playgroud)

如此初始化并在无容器绑定中使用时不会出现错误,如下所示:

<!-- ko if: hasEntities -->
<!-- ko foreach: { data: entities, as: 'entity' } -->
Run Code Online (Sandbox Code Playgroud)

因此,我以相同的位置/方式初始化我的新属性:

  model.numberOfColumns = ko.observable(2);

  model.columnGenerator = ko.computed(function() {
    return ko.utils.range(0, model.numberOfColumns());
  }, model);
Run Code Online (Sandbox Code Playgroud)

并这样使用它:

<!-- ko foreach: { data: columnGenerator, as: 'index' } -->
Run Code Online (Sandbox Code Playgroud)

并得到这个错误:

Knockout.js:72 Uncaught ReferenceError: 无法处理绑定“foreach: function (){return { data:columnGenerator,as:'index'} }”消息:columnGenerator 未定义

我搜索了与此错误相关的许多问题,但没有一个有帮助。

谢谢!

hai*_*770 2

那是因为你的

<!-- ko foreach: { data: columnGenerator, as: 'index' } -->
Run Code Online (Sandbox Code Playgroud)

在与范围(定义的位置)不同的范围中解释。$rootcolumnGenerator

试试这个:

<!-- ko foreach: { data: $root.columnGenerator, as: 'index' } -->
Run Code Online (Sandbox Code Playgroud)

请参阅绑定上下文