如何使用emberfire推送或更新数据?

时间:2018-04-01 15:08:22

标签: firebase ember.js firebase-realtime-database ember-data

编辑:请参阅最后的解决方案

我的猜测是把模型(在我的情况下'用户')放在=>内类型,但它会说“断言失败,你需要传递一个模型......”

我在app / models中有一个user.js

这是路由器的摘录(登录后功能)

self.store.push({
                data: {
                    id: data.currentUser.uid,
                    type: 'user',
                    attributes: {
                        displayName: data.currentUser.displayName,
                        email: data.currentUser.email,
                        photoURL: data.currentUser.photoURL,
                        firebaseUID: data.currentUser.uid,
                        rank: "scorer",
                        status: "active",
                        loginCount: 0,
                        provider: provider,
                        timestamp: new Date().getTime()
                    }
                }
            });

这是我的模型(app / models中的user.js)

import DS from 'ember-data';

export default DS.Model.extend({
  displayName: DS.attr('string'),
  email: DS.attr('string'),
  photoURL: DS.attr('string'),
  firebaseUID: DS.attr('string'),
  rank: DS.attr('string'),
  status: DS.attr('string'),
  loginCount: DS.attr('string'),
  provider: DS.attr('string'),
  timestamp: DS.attr('number')
});

请帮忙:(提前谢谢大家!

编辑=>有效的解决方案:如果您执行createRecord并匹配“id:”属性,它将使用相同的ID更新记录(如果您指定了自己的ID,则会起作用)。但是,如果让系统为您生成ID,我还不确定如何更新记录。我假设你必须先提取ID。但我还没有测试过这个想法。如果有人会如此善良地测试它,那就太棒了。

1 个答案:

答案 0 :(得分:-1)

创建模型并运行其save方法,而不是推送原始数据。

var user = this.store.createRecord('user', {
    displayName: data.currentUser.displayName,
    // set more properties here
})
user.save()

这样,Emberfire和Ember Data可以完成他们的工作并确保数据格式正确。另见