2013-07-23 91 views
0

即時通訊嘗試通過'搜索'功能從YouTube獲取視頻訂閱源。我將數據推入可觀察數組中,但BINDING總是失敗。knockoutjs bindind observablearray doent work

我有這個視圖模型是這樣的:

var videoFeeds = ko.observableArray(); 
var vm = { 
    videoFeeds: videoFeeds, 
    search: search 
}; 
function search(value) { 
    value = value.toLowerCase().replace(/\s+/g, '+'); 

    var options = { 
     url: 'https://gdata.youtube.com/feeds/api/videos/?q=' + value + '&max-results=10&alt=json&v=2', 
     method: 'GET', 
     dataType: 'jsonp' 
    }; 

    $.ajax(options) 
     .done(function (data) { 
      videoFeeds([]); 
      for (var k in data.feed.entry) 
      { 
       var videoFeed = { 
        title : data.feed.entry[k].media$group.media$title.$t, 
        id : data.feed.entry[k].media$group.yt$videoid.$t, 
        author: data.feed.entry[k].author[0].name.$t 
       }; 

       videoFeeds().push(videoFeed); 
      } 
      for (var k in videoFeeds()) 
      { 
       console.log('title : ' + videoFeeds()[k].title); 
      } 
     }) 
     .fail(function (err) { 
      console.log(err); 
     }); 
} 

認爲就像這樣:

<ul data-bind="foreach: videoFeeds"> 
    <li data-bind="text: title"></li> 
</ul> 

,你可以看到我日誌「標題」每飼料到控制檯,它的工作原理很好,數組已更新。但在我看來,我仍然無法看到Feed的「標題」。

感謝您的幫助。

回答

0

而不是調用videoFeeds().push(videoFeed)嘗試更新視圖模型屬性目錄通過說vm.videoFeeds.push(videoFeed)

當您創建視圖模型時,您將首選項傳遞給videoFeeds數組,但是,一旦開始添加項目,您應該只使用View Models數組。

對於可讀性,它可能會更好申報視圖模型是這樣的:

var vm = { 
    videoFeeds: ko.observableArray(), 
    search: search 
}; 

,擺脫最初的數組定義的一起。

+0

你說得對'videoFeeds()。push(videoFeed)'是個問題,非常感謝你的幫助。關於可讀性,我同意你的看法,這可能是最好的辦法。 – dafriskymonkey

+0

不客氣。如果這解決了您的問題,請標記爲答案。謝謝! –

相關問題