使用Backfire在Firebase集合中创建新条目时插入的空值

时间:2014-02-07 21:59:45

标签: firebase

我正在使用Backfire创建一个'索引'集合,用于索引新注册的用户,以便它们可以与Twitter的'typeahead'库(https://github.com/twitter/typeahead.js)一起使用。

    var FireIndex = Backbone.Firebase.Collection.extend({
      model   : Backbone.Model,
      firebase: new Firebase(FirebaseUrl + '/index/')
    }),
    fireIndex = new FireIndex();

    var index = fireIndex.create({id: 1, last_name: 'Smith', first_name: 'John'});

不幸的是,似乎'null'值一直被插入'index'集合中,如下所示:

[null,null,{id:1,....},{id:2,....}]

null值会导致typeahead出错。

我确保没有插入任何内容是空的,并且尝试播种'index'集合,但没有用,具有如下所示的'false'值: {index:false}

null值不会显示在集合的GUI版本中,但如果通过REST API访问则会显示,如“https://mydb.firebaseio.com/index.json”。

感谢任何帮助。

托尼

1 个答案:

答案 0 :(得分:1)

以下是Firebase提供的解决方案:

感谢repro。这是Firebases阵列推断工作(即使不使用Backfire,你也会看到问题)。每当Firebase看到数字键时,它会假定您希望将数据作为数组而不仅仅是对象。在这种特殊情况下,由于只有名为“1”的键,它假定它是一个数组,索引0处的值为空(Firebase中未设置的所有值都为空)。

要解决这个问题,你可以做一些事情:

  • 切换到使用push()生成的ID - 或者在Backfire的情况下 - Backbone.Firebase.Collection.add。
  • 使用类似' - '或':'的字符串作为前缀用户ID,这样就不会启用数组解释。
  • 调整代码,以便将值解释为数组并跳过空值。

希望这有帮助!