5

我刚开始使用 knockout.js,它适用于正常的竞标。我对 observableArray 有疑问。

我想创建一个 observableArray 并为其分配来自 Google Feed API 的 JSON 数据。这是 JSON 格式https://developers.google.com/feed/v1/devguide#resultJson

google.load("feeds", "1");  // Loads Google Feed API
function FeedViewModel()
{
    // Data
    var self = this;
    self.allEntries = null;

    // Example property, and it works
    self.feedHead = ko.observable("BBC News");

    var feed = new google.feeds.Feed("feeds.feedburner.com/BBCNews");
    feed.setResultFormat(google.feeds.Feed.JSON_FORMAT);
    feed.includeHistoricalEntries();
    feed.setNumEntries(30);

    // Loads feed results
    feed.load(function (result) {
        if (!result.error) {           
            self.allEntries = ko.observableArray(result.feed.entries);

            // accessing the title from here is OK
            alert(self.allEntries()[1].title);
        }        
    });
}

在上面的示例中,从 ViewModel 访问数组是可以的,但我需要使用 foreach:allEntries 在视图中(浏览器)显示它

<h2 data-bind="text: feedHead">Latest News</h2>
<!-- ko foreach:allEntries -->
    <div class="lists">
        <a href="#" data-bind="text: title"></a>
    </div>
<!-- /ko -->

但是 ko foreach 循环什么也没有返回。可观察的 feedHead 没问题。

我也没有任何 JS 错误。任何帮助..

4

1 回答 1

23

尝试声明(你有 // Data 的地方)

self.allEntries = ko.observableArray([]);

然后在负载...

self.allEntries(result.feed.entries);
于 2012-03-21T00:55:48.790 回答