Ember数据和Firebase我的Id在哪里



我很难理解如何在使用EmberFire和Firebase的Ember.js中更新记录。

我构建了一个小的测试应用程序,试图理解CRUD的所有功能。我可以返回已创建的任务列表、创建新任务和删除任务。但我无法正确更新列表中的记录。

当我在我的索引页上查看检查器时,我看到在Ember调试器的Data下,它显示了我的模型,并且有一个Id字段,它包含Firebase在服务器上创建记录时生成的值。

但是,当我控制台记录路由中传递给更新操作的对象时,没有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,不是吗?但是,如果它不在我的模型对象中,我应该如何将它传递给find查询?

当您想要更新模型时,将记录从模板/控制器传递回路由操作的最佳选项之一。在这种情况下,记录将在您的函数参数中准备好,因此您的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

最新更新