【发布时间】:2015-03-09 17:43:37
【问题描述】:
我正在从服务器获取数据并将它们推送到可观察的数组中。
我将 observables 推送到一个 observable 数组中。
当我将数据推送到可观察对象中时,可观察对象包含数据。
但是,一旦我将 observables 推送到 observable Array 中,一些 observables 就会丢失数据。
self.mealFoods([]);
$.ajax({
url: "/mealsurl/1",
async: false,
dataType: 'json',
success: function(datad) {
for(var lia = 0; lia < datad.length; lia++){
var cats_url = "/catsurl/" + datad[lia].category_id;
var units_by_food_url = "/unitsurl/" + datad[lia].ndb_no;
var foodThing = new NewFood();
foodThing.foodId(parseInt(datad[lia].id)); //works
foodThing.category(parseInt(datad[lia].category_id)); //works
$.ajax({
url: cats_url,
dataType: 'json',
success: function(dat) {
foodThing.category_foods(dat); //works
}
});
foodThing.food(datad[lia].ndb_no); //works
$.ajax({
url: units_by_food_url,
dataType: 'json',
success: function(dat) {
foodThing.food.units(dat); //works
}
});
foodThing.unit(parseInt(datad[lia].seq)); //works
foodThing.number_of_unit(datad[lia].this_much); //works
self.mealFoods.push(foodThing);
// At this point when looking inside the mealFoods array: self.mealFoods()[0].food(), self.mealFoods()[0].unit(), self.mealFoods()[0].food.units(), self.mealFoods()[0].category_Foods() ALL ARE EMPTY
}
}
});
【问题讨论】:
-
是否可以提供一个 jsfiddle 来演示该问题?您还应该提供 NewFood 的代码
-
嘿韦恩。有点奇怪。它只发生在服务器端数据上。当我伪造它时-它起作用了。
-
我现在可以看到问题了。这是因为 Ajax 调用是异步的。我回家后会发布答案
-
其实你的问题根本不在于Knockout,而在于ajax的异步执行!
标签: ajax asynchronous knockout.js closures