我使用Knockout ^3.1.0
继承了一个项目。我需要构建一些功能。我从未使用过Knockout。
每个视图都有一个视图模型,该视图模型使用init(model)
从主视图模型调用。
属性在init的开头初始化,并在视图中使用,没有任何问题。例如:
model.entities = ko.observableArray([]);
model.hasEntities = ko.observable(false);
如此初始化并在无容器绑定中无错误地使用:
<!-- ko if: hasEntities -->
<!-- ko foreach: { data: entities, as: 'entity' } -->
所以我在同一个地方/方式初始化我的新属性:
model.numberOfColumns = ko.observable(2);
model.columnGenerator = ko.computed(function() {
return ko.utils.range(0, model.numberOfColumns());
}, model);
并使用它:
<!-- ko foreach: { data: columnGenerator, as: 'index' } -->
并收到此错误:
knockout.js:72未捕获的ReferenceError:无法处理绑定&#34; foreach:function(){return {data:columnGenerator,as:&#39; index&#39;}}&#34; 消息:未定义columnGenerator
我已经搜索了许多与此错误相关的问题,但没有人帮助过。
谢谢!
答案 0 :(得分:2)
那是因为你的
<!-- ko foreach: { data: columnGenerator, as: 'index' } -->
在与$root
范围不同的范围中进行解释(其中columnGenerator
已定义)。
请改为尝试:
<!-- ko foreach: { data: $root.columnGenerator, as: 'index' } -->