2013-07-23 121 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

不客气。如果这解决了您的问题,请标记为答案。谢谢! –

相关问题