这可能是另一个带有淘汰赛旋转的javascript范围问题。 通过我购买的书中的示例,其中作者提供了单页应用程序的示例,但选择不完全解释javascript,因为它不是本书的重点。
我的问题是ajax调用中成功操作中的函数如何理解用作参数的嵌套对象的定义。
outerobj.myarray.push.apply(outerobj.myarray, data.map(function (nestedobj) { nestedobj.prop1 }))
The main object
var outerobj = {
view: ko.observable("View1")
nestedobj : {
prop1 : ko.observable(""),
prop2 : "",
prop3 : ko.observable("")
},
myarray : ko.observableArray([])
}
在稍后的Ajax / Jquery选项中,通过这样的调用调用push.apply
var getProperties = function ()
{
$.ajax("/path", {
type: "GET",
success: function (data) {
outerobj.myarray.removeAll();
outerobj.myarray.push.apply(outerobj.myarray, data.map(function(nestedobj) { return nestobj.prop1; }))
outerobj.view("Result");
}
});
}
答案 0 :(得分:0)
Array.prototype.push会将值推送到数组的“顶部”。它可以接收可变数量的参数,例如:
[1].push(2); //[1,2]
[1].push(2, 3); //[1,2,3]
.apply执行给定范围内的函数,应用给定的参数数组。它将数组展开为函数的参数。例如:
var arr =[];
[].push.apply(arr, [1,2]); // this is equivalent to arr.push(1,2);
最后,.map返回一个数组......所以基本上这是将一个项目数组推入数组的好方法。