2014-03-30 46 views
1

我使用emberJS(无Rails的),并在不同的文件中的模板模板/ *。HBS如何在Ember.Handlebars.compile之后更新视图?

我使用AJAX来查询他们和编译模板。

App.SetupTemplate = function(name) {    
      $.ajax({url:"templates/"+name+".hbs", success: function(response) { 
      Ember.TEMPLATES[name] = Ember.Handlebars.compile(response);   
    } });                   
    };                   


    App.ProfileRoute = Ember.Route.extend({          
      setupController: function(controller) { App.SetupTemplate('profile'); 
    },                   
    });   

如果我点击ProfileRoute,它会编译模板,但不会自动在视图中自动更新。 但它适用于以后点击相同的路由,因为模板已经编译并且视图已正确呈现。 我不知道如何使用transitionTo来实现相同的路线。

我该怎么做才能自动更新第一次点击自身的视图?

- 谢谢。

回答

1

你需要阻止过渡,直到模板实际上已经被下载

App.needsTemplate = function(name){ 
    return Ember.isEmpty(Ember.TEMPLATES[name]); 
}; 
App.setupTemplate = function(name) { 
    return new Ember.RSVP.Promise(function(resolve, reject){ 

     if(!App.needsTemplate(name)){ 
     resolve(); 
     } else { 
     $.ajax({url:"templates/"+name+".hbs"}).then(function(response){ 
      Ember.TEMPLATES[name] = Ember.Handlebars.compile(response); 

      resolve(); 
     }); 
     }                       
    }); 
}; 


App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
    return ['red', 'yellow', 'blue']; 
    }, 
    afterModel: function(model, transition){ 
    if(App.needsTemplate('index')){ 
     transition.abort(); 
     App.setupTemplate('index').then(function(){ 
     transition.retry(); 
     }); 
    } 
    } 
}); 

http://emberjs.jsbin.com/OxIDiVU/340/edit

+0

的作品,谢谢。我也使用基础5 CSS。在我以前的代码中,我初始化了它的JS“$(document).foundation();”模板被添加和CSS工作后,但它现在不工作.. :(这是适当的地方初始化它? – Shanthakumar

+0

这很棘手,因为根据基础如何工作,你需要运行它,每次任何新的元素插入,是否正确? – Kingpin2k

+0

是的,我在所有视图中定义了didInsertElement,它的工作原理如下: 'App.ProfileView = Ember.View.extend({didInsertElement:function(){$(document).foundation();} });' – Shanthakumar

相关问题