javascript - Ember.js 2.4 中的更新记录

标签 javascript ember.js ember-data

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

我一直在关注 https://medium.com/@jamesfuthey/a-gentle-introduction-to-ember-2-0-8ef1f378ee4#.mis7qdebs 上的教程

他引入了一种创建组件并将所有操作放入组件和路由中的模式,而不是使用 Controller 。我想知道如何更新数据库(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();
    });
}

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

关于javascript - Ember.js 2.4 中的更新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36558000/

相关文章:

ember.js - 将父路由参数与 ember-data 一起使用的正确方法?

javascript - 将 Google map 标记保存到数据库

javascript - 在子模板中显示父模板

javascript - Ember 找不到模板

ember.js - Ember 模板和 Google AdSense

ruby-on-rails - 通知 ember-data 有关服务器更改的信息

ember.js - Ember 1.0.0 : Ember. 状态已移至插件 : https://github. com/emberjs/ember-states

javascript - 在 JCarousel 中获取当前项目的索引

javascript - 如何同时滚动两个div?

javascript - 如何为谷歌闭包编译器声明全局变量?