【问题标题】:Create ko.observableArray from JSON Object in knockout在淘汰赛中从 JSON 对象创建 ko.observableArray
【发布时间】:2012-04-05 12:39:57
【问题描述】:

我刚开始使用 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 错误。任何帮助..

【问题讨论】:

  • 很确定您需要预先创建数组,然后在您的负载中填写该数组......

标签: javascript json knockout.js google-feed-api


【解决方案1】:

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

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

然后在加载中...

self.allEntries(result.feed.entries);

【讨论】:

  • 嘿 Maxali,你可以把所有的东西都放在 JSFIDDLE 中吗?我真的很想看到一个正在渲染的提要的工作示例。它可能证明对我有帮助。谢谢
  • +1 表示解决方案。令人惊讶的是,这个答案还没有获得 10 票赞成,因为它是使用 Knockout 时很多人会问的这些问题/答案之一! :D
  • 你可以在淘汰赛中从不同的角度来解决这些问题,很多 SO 问题本质上非常相似,只是场景略有不同
  • 值得注意的是,使用 KO 映射插件 (knockoutjs.com/documentation/plugins-mapping.html) 可能是更好的选择(以防您要设置多个属性)。
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 2012-06-06
  • 2016-04-28
  • 2023-04-03
相关资源
最近更新 更多