Ember.js 2.4 更新记录

Update record in Ember.js 2.4

提前致歉,我是 Ember 和 javascript 的新手。

我一直在学习 https://medium.com/@jamesfuthey/a-gentle-introduction-to-ember-2-0-8ef1f378ee4#.mis7qdebs

上的教程

他引入了一种创建组件并将所有操作放在组件和路由中而不是使用控制器的模式。我想知道如何更新数据库 (firebase) 中的记录。

我没有在我的模型中明确创建 ID,因此我试图使用其中一个属性查找特定记录,但它不起作用。我得到

的错误
Error: no record was found at https://taskline.firebaseio.com/tasks/taskname

我认为这是因为我的 findRecord 语法错误。我以为我遵循了文档 https://guides.emberjs.com/v2.4.0/models/creating-updating-and-deleting-records/

中描述的惯例
updateTask: function (model) {
  let task = this.store.findRecord('task', 'taskname').then(function(task){
    task.set( 'taskname', model.taskname);
    task.set( 'startdate', model.startdate);
    task.set( 'enddate',  model.enddate);
    task.set( 'banding',  model.banding);
  });
  task.save();
}

然后我又得到一个错误

Uncaught TypeError: undefined is not a function index.js:26
updateTask

这似乎是由同一个函数抛出的。谁能把我重定向到这里?

findRecord 正在 returning 一个 promise 对象(因为它可能会进行异步调用以查找记录)。 then 函数是任务完全加载的地方。您确实在正确的位置(在 then 函数内)设置了任务属性,但是您调用了 promise 上的 save 而不是加载的任务。您的代码应如下所示:

updateTask: function (model) {
    this.store.findRecord('task', 'taskname').then(function(task){
        task.set( 'taskname', model.taskname);
        task.set( 'startdate', model.startdate);
        task.set( 'enddate',  model.enddate);
        task.set( 'banding',  model.banding);
        return task.save();
    });
}

save 之前的return 语句只是为了链接promise 对象(save 本身也是一个promise)。因此,如果您 return 来自 findRecord 的 promise,则在该 promise 上调用的任何内容都将在保存完成后解析。