6

如何使用淘汰赛 js 映射插件迭代绑定到数据的淘汰赛可观察数组?我创建了这个小提琴来展示我的问题。当我尝试获取淘汰赛 js 数组对象的值时,它会返回一个函数。

有人可以帮我解决这个问题吗?我的代码如下所示。

//Sample JSON Array
var data =
[{"street":"2532 Falkark Dr", "lat":"39.926295", "lng":"-86.012919",   "zipcode":"92256"},{"street":"8558 Appleby Ln", "lat":"39.922742", "lng":"-86.017637", "zipcode":"92256"}]

function ViewModel() {
var self = this;
self.addresses = ko.observableArray([]); 
ko.mapping.fromJS(data, {}, self.addresses);

}
var viewModel = new ViewModel();

//function binding work order details to view
$(document).ready(function () {
  ko.applyBindings(viewModel);
  gothroughtheObservableArray(viewModel.addresses());
});


function gothroughtheObservableArray(Addressarray)
{
 alert("Got Address Array of length "+Addressarray.length);    

for (var i = 0, len = Addressarray.length; i < len; ++i) {
    var address = Addressarray[i];
    alert(address.street);
}

}
4

2 回答 2

10

当您使用mapping.fromJS它将属性映射到可观察对象时。

在 Knockout 中,当您创建一个 observable 以访问它时,您调用它的函数名。

所以当你创建

self.addresses = ko.observableArray([]); 

为了访问底层数组并对其进行迭代(就像任何其他 JavaScript 数组一样),您应该这样做

var innerArray = self.addresses();

和你做的一模一样。但是,由于每个地址都映射到一个可观察对象,因此在访问地址的实际属性时需要这样做。

尝试

    alert(address.street());

(小提琴)

于 2013-05-21T02:34:02.953 回答
3

您也可以将函数重写为如下所示:

function gothroughtheObservableArray(Addressarray)
{
 alert("Got Address Array of length "+Addressarray().length);    

for (var i = 0, len = Addressarray().length; i < len; ++i) {
    var address = Addressarray()[i];
    alert(address.street());
}

}

这是可行的,因为当 Benjamin 回答获得对 observable 的访问权时,您调用了它的函数。

于 2014-07-14T19:52:57.033 回答