Knockout.js knockoutjs bindind observablearray不起作用
我试图通过“搜索”功能从youtube获取视频源。我以可观察的方式推送数据,但绑定总是失败 我的viewModel如下所示:Knockout.js knockoutjs bindind observablearray不起作用,knockout.js,Knockout.js,我试图通过“搜索”功能从youtube获取视频源。我以可观察的方式推送数据,但绑定总是失败 我的viewModel如下所示: var videoFeeds = ko.observableArray(); var vm = { videoFeeds: videoFeeds, search: search }; function search(value) { value = value.toLowerCase().replace(/\s+/g, '+'); var
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>
视图如下所示:
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>
正如您所见,我将每个提要的“title”记录到控制台中,它工作正常,数组已更新。但在我看来,我仍然看不到提要的“标题”
谢谢您的帮助。不要调用
videoFeeds().push(videoFeed)
尝试更新视图模型属性目录,方法是说vm.videoFeeds.push(videoFeed)
创建视图模型时,您正在向videoFeeds
数组传递一个首选项,但是,一旦开始添加项,您应该只使用视图模型数组
为了便于阅读,最好像这样声明ViewModel:
var vm = {
videoFeeds: ko.observableArray(),
search: search
};
并一起去掉初始数组定义 你是对的
videoFeed()。推送(videoFeed)
是问题所在,非常感谢你的帮助。关于可读性,我同意你的看法,这可能是最好的方法。不客气。如果这解决了你的问题,也请标记为答案。谢谢