无法读取undefined的属性'push' - knockout observableArray

时间:2017-12-07 18:54:16

标签: javascript html knockout.js

单击此按钮时,会创建一个对象并将其添加到阵列中,该对象将反映在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已经更新。

0 个答案:

没有答案