如何在Ember.js中的控制器之间传递数据?

时间:2013-08-17 20:28:36

标签: ember.js

我正处于学习Ember的痛苦缓慢的过程中,并且发现指南和文档在涉及非平凡的例子时受到严重限制。

我现在的问题。

鉴于以下路由器定义:

App.Router.map(function () {
this.resource('home', function() {
  this.resource('weather', function() {
    this.route('site', {path: '/:weather_site'});
  });
});

当用户输入home.weather.index路径时,模型挂钩会执行并从服务器获取所有天气信息。当用户然后进入home.weather.some_site时,新路由的模型挂钩将从服务器带来该特定站点的天气数据。如何防止这种冗余?换句话说,控制器如何相互通信?我应该在每个Route中使用setupController挂钩来实现这个目标还是有更好的方法?

是否有任何好的资源可以帮助我了解Ember的数据流入和流出?有没有什么好的资源可以帮助我更快地学习Ember?

1 个答案:

答案 0 :(得分:1)

  

如何防止这种冗余?

目前尚不清楚home / weather / index的模型钩子是否/如何/为什么会从服务器获取所有天气信息。如果这是期望的行为,那么完全同意当用户进入家庭/天气/站点时没有理由获取相同的数据。

如果您使用的是ember-data,则应该没有冗余:

  • 当用户访问home / weather / index App.Site.find()获取所有天气数据时
  • 当他们访问home / weather / site App.Site.find(weather_site)从缓存返回网站并且没有向服务器发出新请求时
  • 如果用户直接访问家乡/天气/网站(或刷新浏览器),则App.Site.find(weather_site)将调用服务器并仅获取该网站的数据。

因此,除非有我遗漏的东西,否则没有可以防止的冗余。

  

换句话说,控制器如何相互通信?

似乎没必要,但是因为你问:控制器通过绑定相互通信。您通过控制器的needs属性声明从一个控制器到另一个控制器的依赖关系,然后Ember自动注入该依赖关系。有关其工作原理的更多信息,请参阅余烬指南dependencies-between-controllers

  

我应该在每个Route中使用setupController挂钩来实现这个目标还是有更好的方法?

在这种情况下,这不应该是必要的。

  

是否有任何好的资源可以帮助我了解Ember的数据流入和流出?

不清楚数据流的含义。最好的猜测是你从Luke Melia的gothamjs presentation

中学到了很多东西
  

有没有什么好的资源可以帮助我更快地学习Ember?而不是深入研究来源?

阅读源代码总是一个不错的选择,但还有很多其他资源。我建议您查看embercastsember weekly