我一直在将我的应用程序从 RethinkDb 迁移到 Firebase,并且在调用 collection.create() 时遇到了试图保存我的收藏的墙。奇怪的是,我的应用程序中有两个 Backbone.Firebase.Collection 实例,其中一个能够正确创建新对象。另一个看似相同的集合无法写入数据并且不会生成错误消息。
我有两个集合,每个集合都有自己的模型类型:1)项目(集合) ->项目(模型) 2)项目(集合) ->镜头(集合) ->镜头(模型)
以下是上述集合/模型的定义:
/* Projects Collection - An ordered list of Projects */
var ProjectModelFirebase = require('../models/projectModelFirebase.js');
module.exports = Backbone.Firebase.Collection.extend({
model: ProjectModelFirebase,
firebase: new Firebase(app.fbUrl),
initialize: function() {
}
});
/* Project Model - data layer for a single Project */
module.exports = Backbone.Firebase.Model.extend({
firebase: new Firebase(app.fbUrl),
initialize: function() {
}
});
/* Shots Collection - An ordered list of Shots */
var ShotModelFirebase = require('../models/shotModelFirebase.js');
module.exports = Backbone.Collection.extend({
model: ShotModelFirebase,
firebase: new Firebase(app.fbUrl),
initialize: function() {
}
});
/* Shot Model - data layer for a single Shot */
module.exports = Backbone.Firebase.Model.extend({
firebase: new Firebase(app.fbUrl),
initialize: function() {
}
});
在我的 Projects 路由(路由文件)中,我通常将集合绑定到视图,并使用模板中的一些输入调用 this.collection.create。我能够以这种方式成功创建项目,并且它们毫无问题地出现在我的 Forge 中。我从我的路由函数调用视图:
// Display list of latest projects
projectsCollectionFirebase = new ProjectsCollectionFirebase();
var projectsView = new ProjectsView({collection: projectsCollectionFirebase});
在我的项目路由(路由文件)中,我将项目集合绑定到视图并正常从 Firebase 检索项目信息:
// Display a single project
projectModelFirebase = new ProjectModelFirebase({id: project});
var projectView = new ProjectView({model: projectModelFirebase});
然后我继续(projectView 文件)创建一个新的镜头集合:
shotsCollectionFirebase = new ShotsCollectionFirebase();
shotsView = new ShotsView({ collection: shotsCollectionFirebase, project: this.model.get('id') });
镜头视图(ShotsView 文件)呈现模板和输入字段供用户输入镜头。
从这里,当用户单击“保存”按钮时,我调用 this.collection.create。Backbone 会识别新模型并相应地更新视图,但 Firebase 不会对其采取行动。控制台中有一条错误消息,指出“在 Firebase 模型上调用保存,忽略。” 但我的代码中没有明确调用任何保存。
我尝试打开调试并注意到“项目”创建命令会导致此消息:
r:0: update {"path":"/projects/test","value":{"shots":null}}
而“镜头”集合不会触发“更新”事件。
这些文件几乎相同。我能发现的唯一区别是第一个示例一次只加载一个集合,而第二个示例加载一个集合,抓取数据,然后加载另一个集合。
任何帮助,将不胜感激。
您可以在我的仓库中找到该项目的完整代码:https ://github.com/bdikason/shots/tree/firebase