Javascript 将数据添加到ko.observablearray的末尾

Javascript 将数据添加到ko.observablearray的末尾,javascript,knockout.js,ko.observablearray,Javascript,Knockout.js,Ko.observablearray,我试图将数据添加到一个可观察数组的末尾,但它没有按预期工作。我打赌这是件小事,但我就是想不起来 我在做什么: self.businesses = ko.observableArray(); function Business(business) { var self = this; self.BusinessID = ko.observable(business.BusinessID ); se

我试图将数据添加到一个可观察数组的末尾,但它没有按预期工作。我打赌这是件小事,但我就是想不起来

我在做什么:

      self.businesses = ko.observableArray();

        function Business(business) {
            var self = this;
            self.BusinessID = ko.observable(business.BusinessID );
            self.Type = ko.observable(business.Type);
            self.Location = ko.observable(business.Location);
        }

    /*ajax get array of businesses as follows:
 [
        {
            "$id": "1",
            "BusinessID ": 62,
            "Type": "Data",
            "Location": "Data"
            },
        {
            "$id": "2",
            "BusinessID ": 63,
            "Type": "Data",
            "Location": "Data"
        },
        {
            "$id": "3",
            "BusinessID ": 64,
            "Type": "Data",
            "Location": "Data",      
        } ]
    */

                var mappedBusinesses = $.map(data, function (business) { return new Business(business) });
            self.businesses(mappedBusinesses);
这一切都按预期进行,并且obersablearray已填充

然而,如果我去增加另一个业务,它不会工作。例如,如果我调用返回此消息的ajax(作为newBusiness):

我确实:

self.businesses().push(newBusiness);
它作为“对象”而不是业务添加到数组中。所以我想我会:

var bus = $.map(newBusiness, function (business) { return new Business(business) });
self.businesses().push(bus);
但是我在JS控制台“UncaughtTypeError:无法读取null的属性'BusinessID'中得到错误

因此,我创建了一个新的var,并在中添加了括号:[],它将添加到可观察数组中,但不是作为“业务”对象,而是作为末尾的“数组[1]”对象,这与其他对象不一样。代码如下:

    var newBus = {
            BusinessID: newBusiness.BusinessID,
            Type: newBusiness.Type,
            Location: newBusiness.Location               
}

        var bus = $.map(newBus, function (business) { return new Business(business) });
    self.businesses().push(bus);
如前所述,这会添加到可观察数组中,但实际上不会添加为“业务”对象,而是添加为“数组[1]”对象


我打赌这是一个非常基本的东西,但就是不能让它工作!

您正在用推送来评估阵列:

self.businesses().push(newBusiness);
可观测阵列有其自己的阵列函数,您只需执行此操作(无参数):


查看此页面:

啊,我就知道这会很简单

它将整个数组发布到ObservableArray…而不仅仅是对象

修复方法:

self.businesses.push(newBusiness[0])
必须添加[0]才能将实际数据推入数组,而不是对象


感谢您的回答!

我可以在JSON中的BusinessID属性后看到一个额外的空格。我不确定这是否会导致问题。这个空格是故意的吗?
dperry
提到应该在不使用
()
和push的情况下进行尝试。否则请告诉我们。Cheersorry-我只是复制/编辑/粘贴了空格(不想显示整个请求,因为它太大了)。我尝试不使用()但我得到了一个错误:未捕获引用错误:无法处理绑定“text:function(){return Type}”消息:类型未定义。看起来它来自HTML页面,因为我有一个表,其中有一个“foreach:businesss”和一个tr元素:“text:Type”。
self.businesses.push(newBusiness);
self.businesses.push(newBusiness[0])