我想从服务器上传ember模板。 我看到了这种需要,如:
$.ajax({
url: 'url_to_template_text',
dataType: 'text',
success: function (resp) {
App.AboutView = Ember.View.extend({
template: Ember.Handlebars.compile(resp)
});
}
});
但我无法理解如何在页面上呈现此视图。 App.AboutView.append() - 无效
如果为该视图添加路由,则没有时间渲染获取模板:
<script type="text/x-handlebars" >
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="about">
That text cant be show
</script>
//////JS
$.ajax({
url: 'url_to_template_text',
dataType: 'text',
success: function (resp) {
App.AboutView = Ember.View.extend({
templateName: 'about',
template: Ember.Handlebars.compile(resp)
});
}
});
App.Router.map(function() {
this.route("about", { path: "/" });
});
也没有用。渲染最旧的模板内容(我的意思是“那个文字不能显示”)
请帮助我,也许我用不好的方式?
答案 0 :(得分:3)
您可以使用beforeModel
挂钩在model
挂钩旁边加载模板。在这种情况下,您似乎还希望将其用作路径的默认视图。您可以使用Ember约定,AboutRoute - &gt;执行此操作。 AboutView - &gt;关于控制器等。
beforeModel: function() {
return $.ajax({
url: '/about.hbs'
})
.then(function(response) {
Em.TEMPLATES.about = Em.Handlebars.compile(response);
});
},
加载模板后,您需要将其分配给全局Ember.TEMPLATES
对象。
另一种方法是对视图的模板执行相同操作。通过重新打开View的类并像上面一样添加加载的模板。请注意,您仍然必须使用{{view App.MyView}}
手柄模板内的视图。
这是一个jsbin示例。