javascript - Uncaught Error : Cannot instantiate more than one Backbone. RelationalModel 每个类型具有相同的 id

标签 javascript backbone.js marionette backbone-relational

我在 Backbone Marionette 应用程序中使用 Backbone Relational。如果我遵循这个工作流程: 直接导航到展示页面 > 单击“主页”(或索引页面)链接 > 单击浏览器的后退按钮返回展示页面 我收到导致页面无法加载的错误:

Uncaught Error: Cannot instantiate more than one Backbone.RelationalModel with the same id per type! 

问题似乎是模型已经在内存中,因此 Backbone Relational 不想重新获取它。它有一个内置的助手来帮助解决这个问题 - findOrCreate .我遵循了 backbonerails.com 教程,其中设置了一个漂亮的“when:fetched”函数,该函数基本上可以在从服务器获取模型后运行您想运行的任何代码。

我一直在尝试将其调整为使用 findOrCreate 函数,但到目前为止都没有成功。我应该如何更新它以使用 findOrCreate 调用而不是 fetch 调用有什么想法吗?

@TheoremReach.module "Utilities", (Utilities, App, Backbone, Marionette, $, _) ->

  App.commands.setHandler "when:fetched", (entities, callback) ->
    xhrs = _.chain([entities]).flatten().pluck("_fetch").value()

    $.when(xhrs...).done ->
      callback()

或者,有没有办法访问已经存在并抛出此错误的“内存中的模型”?我一直在搜索,但无法弄清楚它的存储位置/如何访问它。

提前致谢!

最佳答案

只需使用findOrCreate 实例化模型,然后获取它。

var model = MyModel.findOrCreate({id : modelId});
model.fetch();

关于javascript - Uncaught Error : Cannot instantiate more than one Backbone. RelationalModel 每个类型具有相同的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26046803/

相关文章:

javascript - google.load 和 google apps 脚本

javascript - 用点扩展一个字典键作为另一个字典

javascript - 在单个页面上重复使用 Backbone Marionette 模块

backbone.js - Backbone 事件和 Twitter Bootstrap 弹出窗口

javascript - JavaScript 客户端应用程序中的权限/ACL

javascript - 我可以在 Marionette 模块的第二个定义中访问该模块的私有(private)变量吗?

javascript - 需要帮助将更多照片添加到我的视差网站

javascript - react : Render certain element based on certain button click

javascript - 如何让Javascript更加具体?

javascript - BackboneJS 重置模型