2012-03-21 15 views
6

knockout.jsの使用を開始したばかりで、通常の入札ではうまく機能します。 observableArrayに問題があります。ノックアウトのJSONオブジェクトからko.observableArrayを作成

observableArrayを作成し、Google Feed APIからJSONデータを割り当てたいとします。ここでJSON形式は、ビューモデルからアレイへのアクセスはOKですが、私は、foreachの使用(ブラウザに)ビューに表示する必要がある、上記の例でhttps://developers.google.com/feed/v1/devguide#resultJson

google.load("feeds", "1"); // Loads Google Feed API 
function FeedViewModel() 
{ 
    // Data 
    var self = this; 
    self.allEntries = null; 

    // Example property, and it works 
    self.feedHead = ko.observable("BBC News"); 

    var feed = new google.feeds.Feed("feeds.feedburner.com/BBCNews"); 
    feed.setResultFormat(google.feeds.Feed.JSON_FORMAT); 
    feed.includeHistoricalEntries(); 
    feed.setNumEntries(30); 

    // Loads feed results 
    feed.load(function (result) { 
     if (!result.error) {   
      self.allEntries = ko.observableArray(result.feed.entries); 

      // accessing the title from here is OK 
      alert(self.allEntries()[1].title); 
     }   
    }); 
} 

ある:allEntries

<h2 data-bind="text: feedHead">Latest News</h2> 
<!-- ko foreach:allEntries --> 
    <div class="lists"> 
     <a href="#" data-bind="text: title"></a> 
    </div> 
<!-- /ko --> 

しかしforeachループは何も返しません。観測可能なfeedHeadはOKです。

また、JSエラーはありません。すべてのヘルプ..

+0

を試してみてくださいあなたは、その後、先行配列を作成する必要がありますかなり確信してあなたの負荷であなたはその配列を埋める...... –

答えて

22

(あなたが//データを持っている場合)宣言負荷で、その後

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

...

self.allEntries(result.feed.entries); 
+0

ありがとうKeith、それはうまく動作します。 – Maxali

+2

マヤリちゃん、JSFIDDLEですべてを動かすことは可能でしょうか?レンダリングされているフィードの実際の例を見たいと思っています。それは私にとって参考になるかもしれない。ありがとう –

+0

+1解決策です。ノックアウトを使用するときに多くの人々が尋ねるであろうこれらの質問/回答の1つであるので、この回答にはまだ10の投票がありませんでした! :D –

関連する問題