我试图通过“搜索”功能从youtube获取视频。我在一个observablearray中推送数据,但BINDING总是失败。
我有这样的viewModel:
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 :(得分:0)
而不是调用videoFeeds().push(videoFeed)
尝试通过说vm.videoFeeds.push(videoFeed)
来更新View Models属性目录。
创建视图模型时,您将首选项传递给videoFeeds
数组,但是,一旦开始添加项目,您应该只使用View Models数组。
为了便于阅读,最好像这样声明ViewModel:
var vm = {
videoFeeds: ko.observableArray(),
search: search
};
并一起摆脱初始数组定义。