2013-05-21 15 views
5

Come si esegue una iterazione di un array osservabile ad eliminazione diretta associato a un plug-in di mappatura js knockout ?. Ho creato il violino this per dimostrare il mio problema. Quando cerco di ottenere il valore dell'oggetto knockout js dell'array, restituisce invece una funzione.Iterazione di un array osservabile a eliminazione diretta in javascript

Qualcuno potrebbe aiutarmi in questa faccenda? Il mio codice è come mostrato di seguito.

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

} 

risposta

9

Quando si utilizza mapping.fromJS esegue il mapping delle proprietà agli oggetti osservabili.

In Knockout quando si crea un osservabile per accedere ad esso si richiama il nome della sua funzione.

Quindi, quando si crea

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

Per poter accedere alla matrice di base e iterare esso (come qualsiasi altro array JavaScript) che si dovrebbe fare

var innerArray = self.addresses(); 

Esattamente come hai fatto tu. Tuttavia, dal momento che ogni indirizzo è mappato su un osservabile, è necessario farlo quando si accede alle proprietà effettive degli indirizzi.

Prova

alert(address.street()); 

(fiddle)

+1

Grazie ha funzionato ;-) – msrameshp

3

È inoltre potrebbe avere appena riscritto la funzione di simile a questa:

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

} 

Questo avrebbe funzionato perché, come Benjamin ha risposto per ottenere l'accesso a un osservabile, tu invochi la sua funzione.

Problemi correlati