【问题标题】:Ember RSVP Hash not updating controller contentEmber RSVP 哈希不更新控制器内容
【发布时间】:2014-02-27 22:51:26
【问题描述】:

我试图在 Ember 的一条路线上处理多个控制器。 This response 似乎是要走的路,但很难让它发挥作用。这是一个失败的简单示例:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    myData = [1,2,3];

    return Em.RSVP.hash({
      docs1: myData,
      docs2: myData
    });    
  },
  setupController: function(controller, model) {
    controller.set('model', model.docs1);    
    this.controllerFor('documents').set('model', model.docs2);
  }
});

App.DocumentsController = Ember.ArrayController.extend({
  count: function() {
    return this.get('length');
  }.property('@each'),  
});

App.IndexController = Em.ArrayController.extend({  
  count: function() {
    return this.get('length');
  }.property('@each'),  
});

还有一个显示结果的 JSBin:

http://jsbin.com/wavigada/1/edit

您可以看到 IndexController 报告的正确计数为 3,但 DocumentsController 未设置。

谁能帮帮我?

【问题讨论】:

  • 您链接到的问题讨论了多个模型,而不是控制器。老实说,我不知道是否有可能为一条路线设置多个控制器。
  • 在您使用render 帮助器的模板中,如果您不传递显式模型,则 Ember.js 将返回文档控制器的单例实例,该实例将正确设置模型。这是工作示例:jsbin.com/wavigada/5/edit。 (另外,你有一些尾随逗号你应该在你的计算属性之后清理。
  • @Sarus 谢谢,看来您的答案正是我想要的。令人沮丧的是太简单了@

标签: javascript ember.js


【解决方案1】:

您需要通过needsIndexController 中包含您在setupController 中填充其内容的documents 控制器:

App.IndexController = Em.ArrayController.extend({  
  needs: ['documents'],
  count: function() {
    return this.get('length');
  }.property('@each'),  
});

那你需要把你的模板改成:

<script type="text/x-handlebars" data-template-name="index">
  {{count}}
  {{render 'documents' controllers.documents}}
</script>

请注意,仅输入 {{render 'documents' controllers.documents}}(正如您在问题中所做的那样)是指您当前模型的 documents 属性,该属性不存在。

见:http://jsbin.com/wavigada/6/

【讨论】:

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