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])