0

我试图通过“搜索”功能从 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>

如您所见,我将每个提要的“标题”记录到控制台中,它工作正常,数组已更新。但我仍然看不到提要的“标题”。

谢谢你的帮助。

4

1 回答 1

0

而不是调用videoFeeds().push(videoFeed)尝试更新 View Models 属性目录,说vm.videoFeeds.push(videoFeed).

创建视图模型时,您将首选项传递给videoFeeds数组,但是,一旦开始添加项目,您应该只使用视图模型数组。

为了可读性,最好像这样声明 ViewModel:

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

并一起摆脱初始数组定义。

于 2013-07-23T16:55:50.067 回答