我有一个地图应用程序。点击图钉时,我想通过提供例如更新模板中的“预告片”组件。一个查询参数previewId
,没有触发完整的路由重新渲染,因为这会重新初始化地图并将其置于初始位置,花费大量时间,简而言之:丑陋和糟糕的用户体验
所以我所拥有的是地图路线:
export default Ember.Route.extend({
model: function () {
return this.store.findAll('map-object-proxy');
}
});
一个地图控制器,我处理查询参数:
export default Ember.Controller.extend({
queryParams: ['previewId'],
previewId: null,
previewObject: Ember.computed('previewId', function () {
return this.store.findRecord('map-object', 1);
})
});
和一个map-panel组件,它从map.hbs模板中获取了previewObject:
<div id="map"></div>
<!-- ... -->
<div class="row" id="teaser-header">
<div class="col-xs-12">{{previewObject.someProperty}}</div>
</div>
map.hbs有这个Handlebars标记:
{{map-panel elementId="map-panel" objectProxies=model previewObject=previewObject}}
很抱歉,我还没有完全接受ember的组件架构,更多的是因为控制器很快就会被弃用,而且似乎就像第五轮一样。
谢谢!
答案 0 :(得分:7)
您可以通过这样包装来“刷新”您的组件:
{{#if refresh}}
//component template
{{/if}}
然后是一个隐藏和显示组件的动作,强制它再次渲染。
const _this = this;
this.set('refresh', false);
Ember.run.next(function () {
_this.set('refresh', true);
});