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 = data を実行すると、ビューは更新されません。

4

2 に答える 2

4

まず、変数を定義していませんself:

var self = this;

2 番目: 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();
于 2012-04-15T14:49:53.870 に答える
3

この投稿では、監視可能な配列の長さが常に 0 に等しい理由を説明しています。実際、監視可能な配列 (ko.observableArray(...) によって返される) は関数です。どの関数にも長さのプロパティがあります。

詳細はこちら:

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

したがって、常に myObservableArray.length の代わりに myObservableArray().length を使用する必要があります。

于 2015-12-10T20:55:02.063 に答える