使用Backfire绑定在模型上执行提取不会检索任何数据

时间:2013-06-11 04:20:08

标签: javascript backbone.js firebase backfire

使用Firebase的官方支持的backbone.js绑定我似乎无法从Firebase中的模型中检索任何数据。

例如,我想获取存储在Firebase参考下的用户#2的所有信息:

https://app.firebaseio.com/users/2

为此,我将使用特定于我的用户的ID创建一个新的用户模型,并在该模型上调用fetch:

var ProfileModel = Backbone.Model.extend( {

    initialize: function () {
        console.log('Profie Model');
    },

    firebase: new Backbone.Firebase("https://app.firebaseio.com/users"),

});

var userProfile = new ProfileModel({id: "2"});
userProfile.fetch({
  success: function (model, response, options) {
    console.log(model);
    console.log(response);
    console.log(options);
    userProfile.set({test: "test value"});
    userProfile.save();
  },
  error: function () {
    alert('Something went wrong!');
  }
});

在此代码段中,触发了成功回调,但没有数据从Firebase添加到模型中,并且响应以未定义的形式返回。但是,在模型上设置测试值然后调用save()时,数据会正确保存到Firebase中。

我假设urlRoot不需要在模型上设置,因为绑定使用id属性来创建用户#2的路径。

如自述文件中所述,当firebase对象添加到模型或集合时,它会覆盖骨干同步以使用Firebase。在开始深入研究绑定之前,我们将非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

如果您尝试检索的数据尚未由Backfire写入,则无法正确读取数据。如果您尝试读取现有数据,请确保其格式为:

/users
  /2
    /id: 2
    /attribute1: "foo"
    /attribute2: "bar"

很可能,您的Firebase中未定义https://app.firebaseio.com/users/2/id,Backfire无法识别它是否具有有效的模型。

这也是为什么第二次保存数据时,回调会获得正确的数据 - 如果你看一下伪造的数据,你会看到:

/users/2
  /id: 2
  /test: "test value"

希望这有帮助!