【问题标题】:Emberjs create new model after savingEmberjs 保存后创建新模型
【发布时间】:2016-12-01 07:10:32
【问题描述】:

这似乎非常琐碎,我觉得问起来很尴尬,但我似乎无法在保存当前后创建一个新模型。

想想待办事项应用程序,您想在其中不断添加新任务:

我有一个非常简单的路线可以正确保存,但不会用新模型更新前端

  model() {
    return RSVP.hash({
      distro: get(this, 'store').createRecord('distro'),
    });
  },

  setupController(controller, models) {
    controller.setProperties(models);
  },

  actions: {
    saveDistro(distro) {
      let newDistro = get(this, 'store').createRecord('distro');

      distro.save().then(() => {
        set(this, 'distro', newDistro);
      });
    },
  }

我想我只是在这里错过了显而易见的事情吗?

【问题讨论】:

  • “似乎无法创建”到底是什么意思?

标签: ember.js ember-data


【解决方案1】:

您在这里创建了 2 个不同的 distros。第一个是传递给控制器​​以显示的内容,第二个是在操作saveDistro() 中创建的内容。

通常,您不想在model() 挂钩中创建新记录。那是为了查找数据。由于我不确定您在控制器中做什么并使用第一个发行版查看,因此我无法对此发表评论,但我建议您这样做:

编辑:

// Controller
init() {
  this._super(...arguments)
  this.set('formAttrs', {
    attr1: null,
    attr2: null
    // ...
  })
},

actions: {
  saveDistro() {
    const attrs = this.get('formAttrs')
    this.send('saveDistro', attrs)
  }
}

// Model
actions: {
  saveDistro(attrs) {
    let newDistro = get(this, 'store').createRecord('distro', attrs);

    distro.save().then(() => {
      // transition to new distro route
    });
  }
}

【讨论】:

  • 感谢您的回复,这是一个简单的“创建新”路线,所以我想我不想获取所有当前的发行版,对吗?但是我需要一个模型来保存数据,因此在模型钩子上创建它
  • 明白了。您不需要模型来构建表单来保存数据。事实上,我会敦促你不要那样做。相反,在您的控制器中,创建一个表单 attrs 对象来保存值,然后使用这些值在操作中创建新的 distro
  • 我已经更新了答案以反映我在说什么
  • 啊,这很有趣,我已经和 ember 打交道有一段时间了,我总是完全避免使用控制器,因为人们一直在说他们的坏话并且很快就会离开......
  • 你可以用一个组件而不是一个控制器来做同样的事情。我就是这么做的。
猜你喜欢
  • 1970-01-01
  • 2016-10-03
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多