我在 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/