无法将项添加到observableArray

Cannot add item to observableArray

本文关键字:observableArray 添加      更新时间:2023-09-26

这应该是一个很琐碎的问题,但它让我抓狂!我不喜欢教程的第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函数创建的对象。。。anyway正是我在PrivateSalesMenuItem的构造函数中需要的对象,所以它的一致性不是问题。问题似乎是self.privateSales.push(newPs);不起作用。。。在该阳离子之后,privateSalesMenuModel.privateSales的数目仍然为0。为什么?

已编辑

我在jsFiddle中用同样的代码举了一个例子,它运行得很好,所以我怀疑我的页面中有什么东西让observableArray的推送方法停止了工作。。。我怎样才能知道它是什么?

操作。。。jsfiddle的链接http://jsfiddle.net/YBHf5/

看起来你在代码中混合了this和self:

    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/

问题已解决。。。。这是一个小问题,有一个小解决方案:我只需要在页面末尾推送外部脚本声明。我把这个脚本(其中有关于这个问题的代码)放在页面的顶部,放在正文中,但最重要的是。只要把脚本引用放在正文的末尾,一切都会再次按预期进行。很抱歉浪费了你的时间。。。但是这个小问题很难找到,因为在调试时根本不清楚原因