Emberjs:无法使用Ember Data 1.0.0 beta创建记录

时间:2013-10-22 03:15:36

标签: ember.js handlebars.js

我有一个应用程序,可以保留多个任务列表。每个任务列表都有多个任务。每个任务都有多个注释。

更新到新的Ember数据后,我不得不废弃我的记录创建代码。目前我有这个,这是行不通的。虽然它没有抛出任何错误,但我的模型似乎没有更新。

App.TaskController = Ember.ArrayController.extend({
  needs : ['list'],
  isEditing : false,
  actions : {
    addTask : function(){
      var foo = this.store.createRecord('task', { 
        description : '',
        list : this.get('content.id'),
        comments : []  
      });
      foo.save();
      console.log('Task Created!');
    },
    edit : function(){
        this.set('isEditing', true);
    },
    doneEditing : function(){
        this.set('isEditing', false);
    }
  }
});

有人知道如何在此上下文中创建新任务(以及如何创建新评论)?

请参阅此处的小提琴:http://jsfiddle.net/edchao/W6QWj/

2 个答案:

答案 0 :(得分:2)

是的,你需要在列表控制器中使用pushObject。

我会像这样做addTask,现在几乎ember数据中的每个方法都返回一个promise

App.TaskController = Ember.ArrayController.extend({
  needs : ['list'],
  listController:Ember.computed.alias('controllers.list'),
  isEditing : false,
  actions : {
    addTask : function(){
        var listId = this.get('listController.model.id'),
        list = this,
        store = this.get('store');
        console.log('listId',listId);
        store.find('task').then(function(tasks){
            var newId = tasks.get('lastObject.id') + 1,
            newTask = store.createRecord('task', { 
                id:newId,
                description : '',
                list : listId,
                comments : []  
           });
            newTask.save().then(function(newTaskSaved){
                list.pushObject(newTaskSaved);
                console.log('Task Created!');
            });
        });
    },
    edit : function(){
       this.set('isEditing', true);
    },
    doneEditing : function(){
        this.set('isEditing', false);
    }
  }
});

我认为正确地看待id是非常重要的,这里有一个我使用find的固定装置,但是其余的适配器将是后端分配id并在响应中设置它

JSFiddle http://jsfiddle.net/W6QWj/2/

答案 1 :(得分:1)

好的,所以我回答了我自己的问题。我错过了pushObject()方法。这是另一种做事的方式。虽然我不确定这是否是最好的做法,因为它确实抛出错误“断言失败:你只能在这段关系中添加'列表'记录”

App.ListController = Ember.ObjectController.extend({
  actions:{
    addTask : function(){
      var foo = this.store.createRecord('task', { 
        description : '',
        list : this.get('content.id'),
        comments : []  
      });
      this.get('tasks').pushObject(foo);
      foo.save();
    }
  }
});