2

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

也没有工作。正在呈现最旧的模板内容(我的意思是“无法显示该文本”)

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

4

1 回答 1

3

您可以使用beforeModel钩子将模板加载到model钩子旁边。在这种情况下,您似乎还想使用它来解析为路由的默认视图。您可以使用 Ember 约定、AboutRoute -> AboutView -> AboutController 等来执行此操作。

beforeModel: function() {
  return $.ajax({
    url: '/about.hbs'
  })
  .then(function(response) {
    Em.TEMPLATES.about = Em.Handlebars.compile(response);
  });
},

加载模板后,您需要将其分配给全局Ember.TEMPLATES对象。

另一种方法是对视图的模板执行相同的操作。通过重新打开视图的类并像上面那样添加加载的模板。请注意,您仍然必须将车把模板内的视图与{{view App.MyView}}.

这是一个jsbin示例。

于 2013-07-23T04:05:34.733 回答