更新Ember.js 2.4中的记录

Update record in Ember.js 2.4

本文关键字:记录 Ember js 更新      更新时间:2024-04-25

提前道歉,我对Ember和javascript非常陌生。

我一直在学习教程https://medium.com/@jamesfuthey/a-温和引入-成员-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正在返回一个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();
    });
}

保存之前的return语句只是链接promise对象(保存本身也是一个promise)。因此,如果您要从findRecord返回promise,那么在该promise上调用的任何promise都将在保存完成后解析。