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

How to push or update data with emberfire?

编辑:解决办法见最后

我的猜测是将模型(在我的例子中是 'user')放在 => 类型中,但它会说 "Assertion failed, you need to pass a model ..."

我在 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()
                    }
                }
            });

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

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。但我还没有测试过这个想法。如果有人愿意测试它,那就太棒了。

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

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

这样,Emberfire 和 Ember Data 就可以完成它们的任务并确保数据格式正确。另见