提前道歉,我对 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/