【问题标题】:Call one controller from another without reloading it从另一个控制器调用一个控制器而不重新加载它
【发布时间】:2016-06-28 20:15:42
【问题描述】:

我需要从另一个控制器调用一个控制器。

export default Ember.Controller.extend({
  needs   : ['another'],
  ....
  callAnother: function() {
    this.get('controllers.another').reloadIt();
  }
})

另一个控制器:

export default Ember.Controller.extend({
  init: function() {
     calling API
  },
  reloadIt: function() {
    calling API
  }
})

当我打电话给this.get('controllers.another').reloadIt()。它调用initreloadIt

是否可以在没有init 的情况下调用它,因为它已经加载了。

谢谢。

【问题讨论】:

  • 试图理解您的问题。所以您尝试访问控制器中的 reloadIt{} 属性?
  • @JosephCC,在某些情况下,我需要从第一个控制器重新加载 Another 控制器。例如,我单击按钮,第一个控制器调用callAnothercallAnother 应该在另一个控制器中调用 reloadItreloadIt 调用 API 并重新加载内容。
  • @JosephCC,但是现在当我调用reloadIt 时,另一个控制器调用initreloadIt。在 reloadIt 我设置了新属性 - setProperties 但模板没有更新...
  • 因此在这种情况下您尝试访问单个属性 reloadIt 而不是 init。对吗?
  • 是的,只是reloadIt,因为我的控制器已经在页面上。我有一个包含两个部分的页面 - 两个控制器,两个模板。如果我单击一个部分上的按钮,我应该在第二个部分重新加载(使用其他数据调用 API)。

标签: ember.js


【解决方案1】:

请尝试为此目的使用宏要容易得多。

export default Ember.Controller.extend({
  needs   : ['another'],

 callAnother: Ember.computed.alias('controllers.another.reloadIt'),

 actions:{

    callController: function(){
       this.get('callAnother');
     },

  }
})

【讨论】:

  • 让我知道这是否有效。还搜索 ember 宏,让生活更轻松
  • 哇,非常感谢。现在它不调用init,只调用reloadIt。但现在我有另一个问题。如果在模板中我使用{{anotherVar}},如果在reloadIt 中我设置anotherVar - this.set('anotherVar', 'something new') 模板没有更新...
  • 试试 this.set('anotherVar', somethingNew)
  • 如果我回答了您的问题,请将您的问题标记为已回答
  • 您的模板现在更新了吗?
猜你喜欢
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多