烬。实时上传模板

时间:2013-07-22 16:05:22

标签: templates ember.js live

我想从服务器上传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: "/" });   
});

也没有用。渲染最旧的模板内容(我的意思是“那个文字不能显示”)

请帮助我,也许我用不好的方式?

1 个答案:

答案 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示例。