gpt4 book ai didi

javascript - 使用 'Firebase.Collection' 数据未保存在 Backbone 应用程序中

转载 作者:行者123 更新时间:2023-12-02 17:46:54 25 4
gpt4 key购买 nike

我一直在将我的应用从 RethinkDb 迁移到 Firebase,但在调用 collection.create() 时试图保存我的集合时遇到了困难。奇怪的是,我的应用程序中有两个 Backbone.Firebase.Collection 实例,其中一个能够正确创建新对象。另一个集合看似相同,但无法写入数据并且不会生成错误消息。

我有两个集合,每个集合都有自己的模型类型:1) Projects (Collection) -> Project (Model)2) Projects (Collection) -> Shots (Collection) -> Shot (Model)

以下是上述集合/模型的定义:

/* 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() {
}
});

在我的项目路由 ( routes file ) 中,我通常将集合绑定(bind)到 View ,并使用模板中的一些输入调用 this.collection.create 。我能够以这种方式成功创建项目,并且它们毫无问题地出现在我的 Forge 中。我从路线函数中调用 View :

// Display list of latest projects
projectsCollectionFirebase = new ProjectsCollectionFirebase();
var projectsView = new ProjectsView({collection: projectsCollectionFirebase});

在我的项目路由 ( routes file ) 中,我将项目集合绑定(bind)到 View 并正常从 Firebase 检索项目的信息:

// Display a single project
projectModelFirebase = new ProjectModelFirebase({id: project});
var projectView = new ProjectView({model: projectModelFirebase});

然后我继续 ( projectView file ) 创建一个新的镜头集合:

shotsCollectionFirebase = new ShotsCollectionFirebase();
shotsView = new ShotsView({ collection: shotsCollectionFirebase, project: this.model.get('id') });

“镜头” View ( ShotsView file ) 呈现模板和输入字段,供用户输入镜头。

从这里,当用户单击“保存”按钮时,我调用 this.collection.create。 Backbone 可以识别新模型并相应地更新 View ,但 Firebase 不会对其进行操作。控制台中出现一条错误消息,指出“在 Firebase 模型上调用保存,忽略”。但我的代码中没有明确调用任何保存。

我尝试打开调试并注意到“projects”创建命令会导致此消息:

r:0: update {"path":"/projects/test","value":{"shots":null}}

而“镜头”集合永远不会触发“更新”事件。

这些文件几乎相同。我能发现的唯一区别是,第一个示例一次仅加载一个集合,而第二个示例加载一个集合,抓取数据,然后加载另一个集合作为结果。

如有任何帮助,我们将不胜感激。

您可以在我的存储库中找到该项目的完整代码:https://github.com/bdickason/shots/tree/firebase

最佳答案

Backfire中有两种操作模式,一种是带有“Firebase”一词的模型/集合,例如:Backbone.Firebase.Model/Backbone.Firebase.Collection;另一种模式使用常规主干集合和模型,但在其上定义了“firebase”属性,该属性覆盖主干 sync() 方法。

这两种模式不应混合搭配。例如,如果您使用的是 Backbone.Firebase.Collection,则只要对任何模型进行更改,该集合中的所有模型都会自动与服务器同步( Backbone.Firebase.Model)。调用 savesync 不会执行任何操作,因为更改会在发生时实时保存和同步。

有时这不是您在应用中想要的效果,例如,您希望用户在将任何内容保存到 Firebase 之前明确单击保存按钮。在这些情况下,最好使用常规 Backbone 集合或模型,并简单地为其提供 firebase 属性。然后,您需要显式调用 syncsave 将对本地模型/集合的任何更改放入 Firebase 中。

关于javascript - 使用 'Firebase.Collection' 数据未保存在 Backbone 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21668658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com