单击此按钮时,会创建一个对象并将其添加到阵列中,该对象将反映在UI中。接下来当我再次单击此按钮时出现错误“无法读取属性'推送'未定义”。可能是什么问题?由于上下文似乎没问题,否则它不会在Rule类中调用适当的函数。
html代码
<div data-bind="with: formatterVM">
<div data-bind="with: currentRule">
<ul data-bind="foreach: conditions">
<li data-bind="html: x"></li>
<li data-bind="html: y"></li>
</ul>
<button data-bind="click: addCondition">Click</button>
</div>
</div>
JS / Knockout代码
function ReportsVM() {
self = this
self.formatterVM = new FormatterVM()
}
function FormatterVM(){
self = this
self.rules = ko.observableArray()
self.currentRule = ko.observable(new Rule())
}
function Rule(){
self = this
self.conditions = ko.observableArray()
self.addCondition = function(){
self.conditions.push(new Condition(2,3))
}
}
function Condition(x,y){
self = this
self.x = ko.observable(x)
self.y = ko.observable(y)
}
// Activates knockout.js
ko.applyBindings(new ReportsVM());
工作JSFiddle https://jsfiddle.net/etppe937/
更新
这是self
变量范围的问题。我们需要使用var
关键字,以便不让变量具有全局范围。 JSFiddle已经更新。