2013-08-17 33 views
1

我正处在学习Ember的痛苦缓慢的过程中,并且在非平凡的例子中发现指南和文档严格限制。如何在Ember.js中的控制器之间进行数据通信?

现在我的问题。

给出下面的路由器定义:

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

如何防止冗余?

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

如果您使用的余烬数据应该没有冗余,因为:

  • 当用户访问家/天气/指数App.Site.find()获取所有气象数据
  • 当他们参观家/天气/网站App.Site.find(weather_site)回报如果用户直接访问home/weather/site(或刷新浏览器),则App.Site.find(weather_site)将调用服务器并仅提取该站点的数据。

所以除非有什么我失踪没有冗余来防止。

换句话说,控制器如何能够相互沟通数据?

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

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

在这种情况下不应该有必要。

有没有什么好的资源可以帮助我理解进出Ember的数据流?

不清楚你的意思是数据流。最好的猜测是,你会从卢克苦的gothamjs presentation

是否有良好的资源,帮助我学习灰烬比挖成源更快的学到很多东西?

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

+0

好的,这清除了很多。 (非常感谢您提供的链接)。如果我不使用ember-data,我该如何实现这样的缓存?我的意思是从Ember中“存储”的服务器获取的所有记录在哪里?这样的缓存在哪里存在以便可以从许多控制器获得? – kliron

+0

没有一种方法可以实现这样的缓存。它可以是一个简单的数组,连接到像App.WeatherController这样的控制器或像App.WeatherStore这样的自定义对象。如果它是一个自定义对象,你可能会使用一个初始化工具来设置它并注入到控制器中,例如http://netdyworm.com/blog/2013/04/03/ember-initializers。除此之外,您可能会看到烬数据本身并遵循相同的模式或考虑像[ember-model](https://github.com/ebryn/ember-model)或[EPF](http:// epf .IO)。在所有情况下,缓存只是一个内存数组。 –

相关问题