Итерация наблюдаемого массива нокаута в javascript

Как выполнить итерацию наблюдаемого массива нокаута, связанного с данными, с помощью плагина сопоставления нокаута 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);
}

}

person msrameshp    schedule 21.05.2013    source источник


Ответы (2)


Когда вы используете mapping.fromJS, он сопоставляет свойства с наблюдаемыми.

В Knockout, когда вы создаете наблюдаемый объект, чтобы получить к нему доступ, вы вызываете имя его функции.

Итак, когда вы создаете

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

Чтобы получить доступ к базовому массиву и повторить его (как и любой другой массив JavaScript), вы должны сделать

var innerArray = self.addresses();

Точно так же, как вы. Однако, поскольку каждый адрес сопоставляется с наблюдаемым, вам необходимо сделать это при доступе к фактическим свойствам адресов.

Пытаться

    alert(address.street());

(скрипка)

person Benjamin Gruenbaum    schedule 21.05.2013

Вы также могли бы просто переписать свою функцию, чтобы она выглядела так:

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());
}

}

Это сработало бы, потому что, когда Бенджамин ответил, чтобы получить доступ к наблюдаемому, вы вызываете его функцию.

person Nick Cipollina    schedule 14.07.2014