Ember Data和Firebase我的ID在哪里

时间:2016-04-17 23:17:45

标签: ember.js firebase

我无法理解如何更新使用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不是吗?但如果它不在我的模型对象中,我该如何将它传递给查询查询?

1 个答案:

答案 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

相关问题