我无法理解如何更新使用EmberFire和Firebase的Ember.js中的记录。
我有一个小型测试应用程序,用于尝试了解所有CRUD功能。我可以返回已创建的任务列表,创建新任务和删除任务。但我无法正确更新列表中的记录。
当我查看检查器时,在我的索引页面上,我看到在Ember调试器中,在Data下,它显示了我的模型,并且有一个Id字段,其中包含Firebase在创建记录时生成的值服务器。
但是当我在路由器中记录传递给我的Update Action的对象时,没有Id属性。我认为这就是我收到错误的原因:
Error: no record was found at https://taskline.firebaseio.com/tasks/id
点击这段代码时:
export default Ember.Route.extend({
model: function () {
return this.store.findAll('task');
},
actions: {
updateTask: function (model) {
console.log(JSON.parse(JSON.stringify(model)));
this.store.findRecord('task', 'id').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();
});
},
Ember Fire应该处理Id不是吗?但如果它不在我的模型对象中,我该如何将它传递给查询查询?
答案 0 :(得分:2)
当您想要更新模型时,将记录从模板/控制器传递回路线操作的最佳选择之一。在这种情况下,记录将在您的函数参数中准备好,因此您的updateTask方法将如下所示(仅限):
updateTask(record) {
record.save();
}
整个过程:
首先,路由处理程序中的 下载所有记录,就像您在示例中所做的那样,并实施操作:
import Ember from 'ember';
export default Ember.Route.extend({
model() {
this.store.findAll('task');
},
actions: {
updateTask(task) {
task.save();
}
},
});
其次,在您的模板中列出每个带输入框的任务。也许它可能是一张桌子。 (我这里只有一个字段taskname
,但当然你可以有更多字段。)
<table>
<thead>
<th>ID</th>
<th>Taskname</th>
<th>Action</th>
</thead>
<tbody>
{{#each model as |task|}}
<tr>
<td>{{task.id}}</td>
<td>{{input value=task.taskname}}</td>
<td><button {{action 'updateTask' task}}>Update</button>
</tr>
{{/each}}
</tbody>
</table>
如您所见,您要将task
记录发送回路线中的updateTask
操作,以便我们立即保存。您可以在这个免费教程中学习所有这些技巧,该教程侧重于Ember Way并使用Firebase:http://yoember.com