【问题标题】:Will calling fetch on my Collection instantiate all of the Models it receives in Backbone?在我的 Collection 上调用 fetch 会实例化它在 Backbone 中接收到的所有模型吗?
【发布时间】:2013-01-24 13:27:20
【问题描述】:

我的 Backbone 应用程序中有这段代码:

app.Collections.quotes = new app.Collections.Quotes();
app.Collections.quotes.fetch();

我可以看到网络选项卡中返回了一个对象数组,但是当我展开集合时,里面的模型数组为 0。当在新集合上运行 fetch() 时,它们会被实例化为模型吗?

这是我的收藏:

app.Collections.Quotes = Backbone.Collection.extend({
  model: app.Models.Quote,
  url: function() {
    return app.Settings.apiUrl() + '/quotes';
  }
});

编辑:

app.Collections.quotes.fetch({
        success: function(){
            app.Utils.ViewManager.swap('section', new app.Views.section({section: 'quotes'}));
        }
    });

在我的模型中:

idAttribute: 'Number',

这就是修复!感谢帮助。 Dan 在 cmets 中为我指明了正确的方向......

【问题讨论】:

  • fetch 应该创建新的模型实例...您是否有来自网络选项卡的数据以及一些模型代码?
  • @Matt 如果返回的对象没有 'id' 键,我猜 Collection Fetch() 不能将它们实例化为模型?
  • 我假设您只是在获取后立即控制台日志...等待收集重置事件然后检查它

标签: backbone.js


【解决方案1】:

在 Collection 上调用 fetch() 会尝试将 JSON 响应填充到模型中:Collection#fetch

您的服务器是否确实返回了有效的 JSON 对象数组?

您的报价模型是否经过验证?我很确定 Backbone 在填充集合之前验证每个模型,只填充通过的模型。因此,如果存在,请检查您的 Model#validate 方法是否正常工作。

您不需要 ID(尽管如果您想编辑它们显然是必需的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多