2013-05-21 20 views
5

ノックアウトjsマッピングプラグインでデータにバインドされたノックアウト観測可能配列を反復処理しますか?私はthisフィドルを作成して私の問題を実証しました。ノックアウトjs配列オブジェクトの値を取得しようとすると、代わりに関数が返されます。javacriptでノックアウト観測配列を反復する

誰もこの問題で私を助けてくれませんか?私のコードは以下の通りです。

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

} 

答えて

9

mapping.fromJSを使用すると、プロパティが監視対象にマップされます。

ノックアウトでは、オブザーバブルにアクセスするためにオブザーバブルを作成するときに、関数名を呼び出します。

ですから、基本的な配列にアクセスし、(ちょうど、他のJavaScript配列のような)、それを反復処理するために

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

を作成するときに、あなたが全く同じように

var innerArray = self.addresses(); 

を行う必要があります。しかし、各アドレスはobservableにマップされているため、アドレスの実際のプロパティにアクセスする際にはそれを行う必要があります。ベンジャミンはへのアクセスを得るために答えたように、これが原因で働いているだろう

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

} 

はまた、ちょうどこのように見て、あなたの関数を書き換えている可能性が

alert(address.street()); 

(fiddle)

+1

ありがとうございました;-) – msrameshp

3

試してみてください観察可能であれば、あなたはその機能を呼び出す。

関連する問題