在Ember中,有没有一种方法可以在没有完全重新渲染/路由转换的情况下更新组件

Jul*_*sch 4 ember.js

我有一个地图应用程序.单击某个引脚时,我想通过提供例如查询参数来更新模板中的"预告片"组件,previewId而不会触发完整的路线重新渲染,因为这会重新初始化地图并将其置于初始位置简而言之,需要花费大量时间:用户体验难看且糟糕.

所以我有一个地图路线:

export default Ember.Route.extend({
    model: function () {    
        return this.store.findAll('map-object-proxy');
    }
});
Run Code Online (Sandbox Code Playgroud)

一个地图控制器,我处理查询参数:

export default Ember.Controller.extend({
    queryParams: ['previewId'],
    previewId: null,

    previewObject: Ember.computed('previewId', function () {
        return this.store.findRecord('map-object', 1);
    })
});
Run Code Online (Sandbox Code Playgroud)

和一个map-panel组件,它从map.hbs模板中获取了previewObject:

<div id="map"></div>

<!-- ... -->

<div class="row" id="teaser-header">
    <div class="col-xs-12">{{previewObject.someProperty}}</div>
</div>
Run Code Online (Sandbox Code Playgroud)

map.hbs有这个Handlebars标记:

{{map-panel elementId="map-panel" objectProxies=model previewObject=previewObject}}
Run Code Online (Sandbox Code Playgroud)

对不起,我还没有完全接受ember的组件架构,更多的是因为控制器很快就会被弃用,而且似乎就像第五轮一样.

谢谢!

Hen*_*ire 7

您可以像这样包装它来"刷新"您的组件:

{{#if refresh}}
    //component template
{{/if}}
Run Code Online (Sandbox Code Playgroud)

然后是一个隐藏和显示组件的动作,强制它再次渲染.

const _this = this;
this.set('refresh', false);
Ember.run.next(function () {
        _this.set('refresh', true);
    });
Run Code Online (Sandbox Code Playgroud)