从模型挂钩上的控制器/多个数据访问Ember数据存储

时间:2015-05-23 02:50:13

标签: ember.js ember-data

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

2 个答案:

答案 0 :(得分:4)

在模型钩子中创建此记录并在表单中使用它会更好,例如如果需要进行验证。您可以使用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();
  }
}

答案 1 :(得分:1)

  

提交表单时,我在控制器上调用一个动作,我需要在商店中调用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);
    }
}

或类似的东西。