【问题标题】:backbone.js - using parse without calling fetchBackbone.js - 使用 parse 而不调用 fetch
【发布时间】:2012-06-19 14:30:52
【问题描述】:

在页面加载时,我通过this technique 将我的数据引导到我的集合中。这很好用,但我遇到了一个问题,我有子模型也需要转换。

例如,我返回一个名为 Book 的 JSON 集合,每个 book 数组包含 10-20 个模型,这些模型本身称为 Pages。如果我尝试直接访问 Pages,我会收到 [object][object] 错误,因为 Backbone 无法确定它是什么类型的对象。

以前当我使用fetch 时,我会通过使用包含parse 操作的集合来解决这个问题。在parse 我会做类似的事情:

Collection_Books = Backbone.Collection.extend({
    model: Model_Book,
    parse: function (response) {
        response.Pages = new Collection_Pages(response.Pages);
        return response;
    }
});

现在我直接访问数据而不是使用fetch,文档暗示我不再可以访问parse 方法。

如果我不使用 fetch 或在页面加载时调用服务器,我如何使用 Books > Pages 示例投射子模型?

【问题讨论】:

  • 如果你可以稍微调整一下你的构造函数/初始化方法,你当然可以在那里设置子模型。在这篇文章的结尾有更多细节:bit.ly/KKHItJ
  • 您的此技术链接已损坏

标签: javascript backbone.js


【解决方案1】:

不确定这是否是新的,但看起来您也可以将构造函数的 options 参数的 parse 属性设置为 true,从而告诉构造函数使用您的 parse 方法:

modelInstance = new MyModel(obj, {parse: true});

http://backbonejs.org/#Model-constructor

【讨论】:

  • 注意:这也适用于集合构造函数,例如var books = new Collection_Books(json, {parse: true});
  • 这是新行为,Backbone 在提问时没有此选项。我想我们只能等到“接受”被切换。
  • 此答案不适用于调用集合解析,仅适用于模型的每个解析。你会认为new Collection_Books(json, {parse: true}); 会调用YourCollection.prototype.parse,但事实并非如此。所以这个答案不可能是正确的。
【解决方案2】:

更新:此答案现已过时,请参阅uglymunky's answer 了解更多最新信息。


你是对的,parseonly specified to be called during fetch,所以当你从原始数据构建一个集合时它不会被调用。

但是,由于您控制用于引导集合的原始数据,因此您可以自己调用集合的 parse

var c = new YourCollection(
    YourCollection.prototype.parse([
        // attribute data goes here...
    ])
);

演示:http://jsfiddle.net/ambiguous/kdaZ3/

您的 parse 方法(集合和模型)不应该关心它们的调用上下文,因此直接从原型调用它们应该没问题。

【讨论】:

  • 我想这大概是你第三次用backbone.js 来救我了。我再次感谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多