如何在ember(live)中刷新模板?

Sam*_*ron 14 javascript ember.js

在开发期间我想刷新我的车把模板,如果它们是实时保存的.

我已经有一个websocket通道,可以在文件保存时通知我.此时,我可以通过更新script标记上的哈希来强制重新加载特定模板src.

如何通知所有使用此模板的视图,他们需要刷新并强制刷新?

(我怎样才能找到它们?如何触发刷新?)

Sam*_*ron 7

请注意,这适用于简单的模板,但不适用于渲染到插座的模板

实现这一目标相当棘手:

var js = "template.js";
var templateName = "template";

Ember.TEMPLATES["empty"] = Handlebars.compile("")

// script loaders are the simplest way of getting a callback 
$LAB.script(js).wait(function(){
  $.each(Ember.View.views,function(){
     if(this.get('templateName')==templateName){
       this.set('templateName','empty');
       this.rerender();
       this.set('templateName',templateName);
       this.rerender();
     }
  });
})
Run Code Online (Sandbox Code Playgroud)


Luk*_*lia 2

理论上,你可以这样做Ember.View.views.filterProperty('templateName', nameOfUpdatedTemplate).set('template', Ember.TEMPLATES[nameOfUpdatedTemplate])。这应该强制重新渲染。

我没有尝试过这个,也不知道您可能会遇到什么边缘情况,但这将是我能想到的最简单的方法。