我有一个地图应用程序,它有一个带有侧边栏信息的全屏地图。这个应用程序有两个路线:
/places/
places/1/
我的地图目前是Component
,位于application.hbs
,因此它位于路线模板的“外部”,并且会在路线更改中保留。它看起来像:
<div class="page">
<aside class="sidebar">
{{outlet}}
</aside>
<div class="content">
{{places-map ... }}
</div>
</div>
我的路线看起来像是:
Router.map(function() {
this.route('index', { path: '/' });
this.route('place', { path: "/place/:place_id" });
this.route('places');
});
所以,虽然我已经完成了所有这些设置和工作(我可以看到一个地方列表并移动一个特定的地方,在两种情况下,地图都在“背景”中),我无法理解我的路线如何将信息提供给我的组件,或者只是我的路由如何与位于其上下文“之外”的组件进行通信?
这是否是Ember的可能模式,有没有办法实现它?
答案 0 :(得分:2)
同样关于数据向下动作的@GerDner said。
从顶部开始:
<强>应用/ controller.js 强>
import Ember from 'ember';
export default Ember.Controller.extend({
somethingDownFromController: null
});
<强>应用/ route.js 强>
import Ember from 'ember';
const {
set
} = Ember;
export default Ember.Route.extend({
actions: {
sendSomethingUp(something) {
set(this.controllerFor('application'), 'somethingDownFromController', something);
}
}
});
<强>应用/ template.hbs 强>
<div class="page">
<aside class="sidebar">
{{outlet}}
</aside>
<div class="content">
{{places-map
something=somethingDownFromController
}}
</div>
</div>
<强>地点/ route.js 强>
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return {
somethingFromNestedRoute: 'boooooyaaaaah'
}
}
});
<强>地点/ template.hbs 强>
<button {{action 'sendSomethingUp' model.somethingFromNestedRoute}}>
Send model up
</button>
您可能不需要通过此处冒泡的动作发送任何内容。如果是这种情况,那么您可以从应用程序控制器或路由中获取所需内容并将其传递到places-map
。
<强>场所地图/ template.hbs 强>
Insert something from the outer context:
<div>{{something}}</div>
Here's an ember-twiddle。我在router.js
文件中做了一些注释,根据应用程序的确切需要,它可能很有用。
答案 1 :(得分:0)
数据向下/动作模式就是答案。 http://www.samselikoff.com/blog/data-down-actions-up/
您将数据保存在顶层组件/控制器上,并将数据传递给子组件。数据更改通过子组件上的操作触发,并由顶级组件/控制器通过动作冒泡处理。因此,您只需要一个知道如何更改数据以及如何获取数据的组件/控制器。