2012-04-15 4 views
3

ある:観察可能な配列の長さは、JSここ常にゼロ

var view = function(){ 
    self.arry = ko.observable(); 

    self.arry(ko.mapping.fromJS([{prop:'Test'},{prop:'Test'}])); 

    console.log(self.arry().length);  
} 
var v = new view(); 

観察可能な配列長は常にゼロです。正しい長さを得るにはどうすればいいですか?

編集:
JSを更新し、エラーを修正しました。 http://jsfiddle.net/eRHTv/

var view = function(){ 
    var self = this; 
    self.arry = ko.observableArray(); 

    self.load_items = function(){ 
    setTimeout(function(){ 
    self.arry(ko.mapping.fromJS([{prop:'Test'},{prop:'Test'}])); 
    }, 100); 
    } 
    self.no_items_visible = ko.computed(function(){ 
    return (self.arry().length == 0); 
    }); 

    self.load_items(); 


    ko.applyBindings(self); 
} 

var v = new view(); 

これを実行すると、何の項目のdivが常に表示されません、あなたはself.arry =データを行う場合、ビューは更新されません。あなたは、変数selfを定義することはありませんしている:

var self = this; 

第二:ある

+1

これには欠けているか間違っているものがあります。おそらくknockoutjs.comのインタラクティブチュートリアルをチェックしてください。 – Niko

+0

質問はおそらく将来の訪問者を助けるものではありません。私は閉じようとしている。 – nes1983

答えて

4

まず最初に入力が配列の場合ko.mapping.fromJS()は、観察可能な配列を返します。

self.arry = ko.mapping.fromJS(...); 
合計で

var view = function() { 
    var self = this; 

    self.arry = ko.mapping.fromJS([ {prop:'Test1'}, {prop:'Test1'} ]); 

    console.log(self.arry().length); 
} 

var v = new view(); 
+0

self.arry(ko.mapping.fromJS())の理由は、ビューが更新されるためです。そうすることで、self.arry()。lengthは常に0より大きくなります。 – firebird

+1

既存のobservableArrayを別のobservableArrayの値で更新する必要がある場合は、配列を渡す必要があります。観察可能なものはありません: 'self.arry .mapping.fromJS([{prop: 'Test1'}、{prop: 'Test2'}])()/ * <--- * /); ' – Niko

+0

問題を修正しました。 – firebird

2

観察可能な配列の長さが常にある理由この投稿は、説明実際には、観測可能な配列(ko.observableArray(...)によって返される)は関数です。関数にはlengthプロパティがあります。ここ

詳細は:

https://github.com/knockout/knockout/issues/4

だから、あなたは常に使用する必要があります。myObservableArray()の代わりにmyObservableArray.lengthの長さを。

関連する問題