我刚刚完成了淘汰教程,现在我正在尝试从外部页面获取数据。
在教程中,他们使用以下代码:
self.seats = ko.observableArray([
new SeatReservation("Steve", "Standard (sandwich)", "34.95" ),
new SeatReservation("Paul", "Standard (sandwich)", "14.95" )
])

我想更新它以从外部文件中获取循环选项:
self.seats = ko.observableArray([
$.get( "scripts/test.js", function( data ) {
$(data.data).each(function(index, result) {
new SeatReservation(result.name, result.mealName, result.price )
})
})
)]

测试结构如下:
var data = [
{
'mealName': 'Standard (sandwich)',
'price': '0',
},
{
'mealName': 'Main (sandwich)',
'price': '34.95',
}
];
我还需要做什么?
我在页面上包含了jQuery和Knockout。
我还必须从file://运行它,因为它需要在某处发送
所以我已经更新了我的代码来执行此操作
var newData = ko.utils.arrayForEach(data, function(item){
console.log(item)
console.log(item.firstName + " " + item.lastName + " " + item.price);
return new SeatReservation(item.firstName, item.lastName, item.price);
});
console.log("here");
console.log(newData);
self.seats(newData);

控制台正在按项目的预期记录数据,但返回没有做任何事情,console.log(newData)返回undefined
为什么会这样?
答案 0 :(得分:1)
你现在拥有的东西,你正在丢弃ajax调用的结果。你需要做一些像
这样的事情$.get( "scripts/test.js", function( data ) {
self.availableMeals = data;
});
然而,由于self.availableResults
不是knockoutjs ObservableArray,因此该页面不会通过ajax调用响应来自服务器的更改。
你会想要做这样的事情。
self.seats= ko.observableArray();
$.get( "scripts/test.js", function( data ) {
var newData = ko.utils.arrayForEach(data, function(item){
return new SeatReservation("", item.mealName, item.price);
});
self.seats(newData);
});