首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向ko.observablearray的末尾添加数据

向ko.observablearray的末尾添加数据
EN

Stack Overflow用户
提问于 2015-01-29 13:23:51
回答 2查看 715关注 0票数 1

我试图将数据添加到可观察数组的末尾,但它并不像预期的那样工作。我敢打赌这是个小问题,但我就是不能把头挪开。

我所做的是:

代码语言:javascript
复制
      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):

代码语言:javascript
复制
{
    "$id": "1",
    "BusinessID ": 68,
    "Type": "Data",
    "Location": "Data"
}

我知道:

代码语言:javascript
复制
self.businesses().push(newBusiness);

它作为“对象”而不是业务添加到数组中。所以我想我应该这么做:

代码语言:javascript
复制
var bus = $.map(newBusiness, function (business) { return new Business(business) });
self.businesses().push(bus);

但是,我在JS控制台中得到了"Uncaught :BusinessID“属性null中的错误

因此,我创建了一个新的var,并添加了方括号:[] in并将其添加到可观察的数组中,但不是作为"Business“对象,而是作为"Array1”对象在末尾添加,这并不像其他的那样起作用。守则如下:

代码语言:javascript
复制
    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);

如前所述,这将添加到可观察的数组中,但实际上并不是作为“业务”对象添加,而是作为"array1“对象添加。

我敢打赌这是一种非常基本的东西,但就是不能让它起作用!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-30 07:16:55

我就知道这会很简单!

它只是将整个数组提交给ObservableArray...not,而不是对象。

解决办法:

代码语言:javascript
复制
self.businesses.push(newBusiness[0])

必须添加in才能将实际数据推入数组,而不是对象!

谢谢你的回答!

票数 3
EN

Stack Overflow用户

发布于 2015-01-29 14:08:21

您正在用推送来评估数组:

代码语言:javascript
复制
self.businesses().push(newBusiness);

可观察到的数组有它们自己的数组函数,您应该这样做(没有父函数):

代码语言:javascript
复制
self.businesses.push(newBusiness);

见本页:http://knockoutjs.com/documentation/observableArrays.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28215874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档