通过push.apply了解knockout如何与javascript对象进行交互

时间:2014-12-01 00:42:00

标签: javascript jquery ajax knockout.js

这可能是另一个带有淘汰赛旋转的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");

}
});
}

1 个答案:

答案 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返回一个数组......所以基本上这是将一个项目数组推入数组的好方法。