更新Ember.js 2.4中的记录
Update record in Ember.js 2.4
提前道歉,我对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都将在保存完成后解析。
相关文章:
- 更新Ember.js 2.4中的记录
- Ember.js按名称查找模型项,然后将其添加到现有的不同模型hasMany记录中
- 在ember.js记录上使用toJSON,将其中一个属性设置为null
- Ember.js没有使用共享模板持久化记录
- Ember.js——如何对模型进行控制台日志记录
- 创建具有belongsTo关系错误的记录-Ember.js
- 使用 Ember-Model 创建新记录
- 每当有新记录时,使用 Ember-Model 更新视图
- Ember - 绑定到数组控制器中的过滤列表,然后添加新记录
- 从不同的控制器 Ember.js 向模型添加新记录
- Ember.js 在 App.Route 中指定位置=“历史记录”的 URL 类型时出错
- 将未保存的记录传递到 Ember .js路由
- 在transitionTo之后,Ember.js历史记录不起作用
- 无法在嵌入式应用程序中使用位置历史记录:ember-js
- 搜索Ember数据async hasMany id而不加载所有id记录
- 在Ember.js Ember数据记录数组上迭代
- Ember.js:live更新不适用于#each绑定到存储记录的子集
- Ember-js链接到父记录
- 在不进行HTTP调用的情况下更新Ember Data中的特定记录
- 数据存储在ember中只返回一条记录