【问题标题】:accessing Ember data store from a controller / multiple data on model hook从控制器访问 Ember 数据存储/模型挂钩上的多个数据
【发布时间】:2015-05-23 02:50:12
【问题描述】:

我有一个模型钩子,它从数据存储中返回评论列表。在同一页面上,我有一个审核表。提交表单后,我在控制器上调用了一个操作,我需要在商店上调用 createRecord()。通常我会从模型钩子传递一个创建的记录,但我的模型钩子已经被占用了。这里最好的方法是什么?

【问题讨论】:

标签: ember.js ember-data


【解决方案1】:

在模型钩子中创建此记录并在整个表单中使用它会更好,例如用于在需要时进行验证。您可以使用Ember.RSVP.hash 在模型挂钩中获取多个模型:

model: function() {
  data = {
    reviews: store.find("review"),
    newReview: store.createRecord("review")
  };

  return Ember.RSVP.hash(data);
}

比,在你的setupController

setupController: function(controller, model) {
  // all your data is in model hash
  controller.set("model", model.reviews);
  controller.set("newReview", model.newReview);
}

多亏了这一点,您将在控制器中从一开始就拥有您的 newReview 对象。您可以在表单中直接设置绑定并即时进行验证。这是更好的方法,因为它不需要手动将数据从表单复制到对象,而是像这样利用 ember 绑定系统。

您所要做的就是:

actions: {
  save: function() {
    this.get("newReview").save();
  }
}

【讨论】:

  • 谢谢!我喜欢这种方法。在 setupController 中,我不能直接将 newReview 设置为 store.createRecord('review') 并完全避免 Ember.RSVP.hash 吗?
  • 其实可以。在模型钩子中批处理模型相关内容只是样式指南的问题。
  • 当您要清除表单时,不会直接将表单绑定到模型会导致问题吗?
  • 清除表格是什么意思?您只需将记录属性设置为空值,它将清除表单和记录。另一方面,如果没有保存在 willTransition 路由钩子中,则值得销毁记录,以免它们在存储中以未保存的形式存在。
【解决方案2】:

提交表单后,我在控制器上调用了一个操作,我需要在存储上调用 createRecord()。通常我会从模型钩子传递一个创建的记录,但我的模型钩子已经被占用了。

我不知道“从模型挂钩传递创建的记录”是什么意思。从哪里通到哪里?如果要创建记录,只需在操作中创建即可。然后您可以使用新记录更新控制器的模型:

// controller
actions: {
    addReview() {
        function create()     { return store.createRecord('review', ...); }
        function push(review) { model.pushObject(review); }

        var store = this.get('store');
        var model = this.get('model');

        create() . save() . then(push);
    }
}

或类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2017-10-06
    • 2016-11-18
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多