无法将项添加到observableArray

时间:2013-12-16 11:41:33

标签: javascript knockout.js

这应该是一个非常微不足道的问题,但它让我发疯! 我不喜欢本教程的第1步,但我无法工作....所以这是我的代码:

/* Model definition */
    var PrivateSalesMenuModel = function () {
    var self = this;
    this.privateSales = ko.observableArray();
    this.addPrivateSale = function (privateSale) {
        var newPs = new PrivateSaleMenuItem(privateSale);
        self.privateSales.push(newPs);
    };
};

var PrivateSaleMenuItem = function (ps) {
    this.title = ps.Description;
    this.hasActual = ps.HasActual;
    this.hasSale = ps.HasSale;
    this.listaId = ps.ListaId;
    this.isSelected = false;
};
/* end model definition*/

var privateSalesMenuModel = new PrivateSalesMenuModel();

ko.applyBindings(privateSalesMenuModel);

非常简单......我有一个代表我的模型的对象,它是其他对象的集合,称为PrivateSaleMenuItem。 问题是addPrivateSale没有按预期工作。我在代码中的某处

privateSalesMenuModel.addPrivateSale(ps);

其中ps是由其他JavaScript函数创建的对象...无论如何,我在PrivateSaleMenuItem的构造函数中需要的对象,所以它的一致性不是问题。 问题似乎是self.privateSales.push(newPs);不起作用......在该位置之后,privateSalesMenuModel.privateSales的数量仍为0。 那是为什么?

被修改

我在jsFiddle中给出了一个同样精确代码的示例,并且它运行正常,所以我怀疑在我的页面中有一些东西让observableArray的push方法停止工作......我怎么能找出它是什么?

ops ... jsfiddle http://jsfiddle.net/YBHf5/

的链接

2 个答案:

答案 0 :(得分:1)

看起来你在这里混合了这个和我自己的代码:

    var PrivateSalesMenuModel = function () {
    var self = this;
    this.privateSales = ko.observableArray();
    this.addPrivateSale = function (privateSale) {
        var newPs = new PrivateSaleMenuItem(privateSale);
        self.privateSales.push(newPs);
    };
};

将它们改为全部使用自我修复如下:

var PrivateSalesMenuModel = function () {
    var self = this;
    self.privateSales = ko.observableArray();
    self.addPrivateSale = function (privateSale) {
        var newPs = new PrivateSaleMenuItem(privateSale);
        self.privateSales.push(newPs);
    };
};

请在这里看到工作小提琴:

http://jsfiddle.net/YBHf5/1/

答案 1 :(得分:0)

问题解决了....这是一个微不足道的问题,有一个简单的解决方案:我只需要在页面末尾推送外部脚本声明。 我在页面顶部,在正文内部,但在其他任何内容之上都有脚本(问题中提供的代码存在)。 只需将脚本引用放在正文的末尾,一切都按预期再次运行。 很抱歉浪费你的时间......但是这个小问题很难找到,因为调试时原因并不清楚