我试图将数据添加到可观察数组的末尾,但它并不像预期的那样工作。我敢打赌这是个小问题,但我就是不能把头挪开。
我所做的是:
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):
{
"$id": "1",
"BusinessID ": 68,
"Type": "Data",
"Location": "Data"
}我知道:
self.businesses().push(newBusiness);它作为“对象”而不是业务添加到数组中。所以我想我应该这么做:
var bus = $.map(newBusiness, function (business) { return new Business(business) });
self.businesses().push(bus);但是,我在JS控制台中得到了"Uncaught :BusinessID“属性null中的错误
因此,我创建了一个新的var,并添加了方括号:[] in并将其添加到可观察的数组中,但不是作为"Business“对象,而是作为"Array1”对象在末尾添加,这并不像其他的那样起作用。守则如下:
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“对象添加。
我敢打赌这是一种非常基本的东西,但就是不能让它起作用!
发布于 2015-01-30 07:16:55
我就知道这会很简单!
它只是将整个数组提交给ObservableArray...not,而不是对象。
解决办法:
self.businesses.push(newBusiness[0])必须添加in才能将实际数据推入数组,而不是对象!
谢谢你的回答!
发布于 2015-01-29 14:08:21
您正在用推送来评估数组:
self.businesses().push(newBusiness);可观察到的数组有它们自己的数组函数,您应该这样做(没有父函数):
self.businesses.push(newBusiness);见本页:http://knockoutjs.com/documentation/observableArrays.html
https://stackoverflow.com/questions/28215874
复制相似问题