【问题标题】:Emberjs create record with hasMany/belongsToEmberjs 使用 hasMany/belongsTo 创建记录
【发布时间】:2015-08-20 18:32:51
【问题描述】:

我正在尝试创建具有 hasMany/belongsTo 关联的记录。记录已创建,但未保存...

故事模型:

export default DS.Model.extend({
    title: DS.attr('string'),
    description: DS.attr('string'),
    tasks: DS.hasMany('task', { async: true })
});

任务模型:

export default DS.Model.extend({
  title: DS.attr('string'),
  story: DS.belongsTo('story', { async: true })
 });

组件对象:

actions: {
        createNewTask(){
            var taskTitle = this.get('newTaskTitle');
            var tasks = this.get('story.tasks');
            var story = this.get('story');

            this.set('newTaskTitle', '');

            this.sendAction('action', taskTitle, tasks, story);
            this.send('toggleModal');
        }

在上面,story=model 和 this.get('story.tasks') 总是返回一个空数组。

路由对象:

export default Ember.Route.extend({
    model: function(params){
        return this.store.findRecord('story', params.id);
    },
    actions: {
        createNewTask(newTaskTitle, tasks, story){
            var newTask = this.store.createRecord('task', {
                title: newTaskTitle
            });

            newTask.save().then(function(task){
                //I think the issue is somewhere in here
                tasks.addObject(task);
                story.save();
            });
        }
    }

基本上,创建的任务不会与其相关的故事一起保存......任何帮助都会很棒。谢谢!

编辑 这是我本地存储中存储的 json

{  
   "story":{  
      "records":{  
         "3jf2h":{  
            "id":"3jf2h",
            "title":"Story1",
            "description":"Story1",
            "tasks":[  
               "6i03h"
            ]
         }
      }
   },
   "task":{  
      "records":{  
         "6i03h":{  
            "id":"6i03h",
            "title":"T1",
            "description":"T1",
            "story":null
         }
      }
   }
}

【问题讨论】:

  • “创建的任务没有与其关联的故事一起保存”是什么意思?你有什么错误还是什么?
  • @GennadyDogaev 我用存储的 json 编辑了我的问题。每当我创建一个任务时,它都会被添加到故事的任务数组中,但是对于新创建的任务,故事为空
  • 所以您正在使用本地存储并查看那里。但是,我认为这里一切正常,当 ember 从存储中加载数据时,它会处理关系。
  • @GennadyDogaev 只是每次我尝试创建一个新任务时,它都会覆盖现有任务而不是添加到它......
  • 试试story.set('tasks', tasks).save()

标签: javascript ember.js ember-data local-storage


【解决方案1】:

在搞砸了事情之后,我找到了一个解决方案,但我不确定它是否是最好的解决方案......

在我的故事路线中:

actions: {
        createNewTask(newTaskTitle, newTaskDesc, tasks, taskType, story){
            var newTask = this.store.createRecord('task', {
                title: newTaskTitle,
                description: newTaskDesc,
                status: 'Not Started',
                type: taskType
            });

            newTask.save().then(function(task){
                tasks.addObject(task);
                story.save().then(function(){
                    task.set('story', story);
                    task.save();
                });
            });
        }
    }

我所做的就是对保存的故事设定一个承诺,并将任务的故事设置为新保存的故事。

即使这解决了我的问题,这是正确的做事方式吗?

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多