我在Backbone Marionette应用程序中使用Backbone Relational。如果我遵循此工作流程: 直接导航到显示页面>点击" Home" (或索引页面)链接>点击浏览器的后退按钮返回到显示页面我收到错误导致页面无法加载:
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()
或者,是否有办法访问内存中的"模型"已存在并抛出此错误?我一直在寻找,但无法找出存储位置/如何访问它。
提前致谢!
答案 0 :(得分:3)
只需使用findOrCreate
来实例化模型,然后获取它。
var model = MyModel.findOrCreate({id : modelId});
model.fetch();