4

我有一个使用ember-railsgem 的 rails 应用程序。

我的网站中有一部分不在 ember 上,但可以方便地使用通过资产管道提供的车把模板之一。然而,似乎有些不对劲。具体来说,我的模板返回如下:

Ember.TEMPLATES["views/wanderlists/templates/gallery"] = Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) { helpers = helpers || Ember.Handlebars.helpers;   var self=this;


  data.buffer.push("<h1>Gallery!</h2>\n"); });

但是,如果我尝试使用此模板:

Ember.TEMPLATES["views/wanderlists/templates/gallery"]({})
TypeError: Cannot read property 'buffer' of undefined

知道为什么生成的模板会出现问题吗?

4

1 回答 1

6

知道为什么生成的模板会出现问题吗?

您不能调用 ember 车把编译器编译的车把模板,就好像它们是普通车把模板一样。他们期待一套完全不同的论点。具体来说,他们希望(context, options)在 options 有一个 data.buffer 的地方传递,输出将被写入。例如,如果您尝试:

Ember.TEMPLATES["views/wanderlists/templates/gallery"](this, {data: {buffer: 'NOT-A-BUFFER'}})

控制台应该输出TypeError: Object NOT-A-BUFFER has no method 'push'

我的网站中有一部分不在 ember 上,但可以方便地使用通过资产管道提供的车把模板之一。

好的。这真的很容易做到,只是不能Ember.TEMPLATES直接访问。而是使用Ember.View, 并直接调用 appendTo() 进行渲染。例如:

App = Ember.Application.create({});
var view = Ember.View.create({
  templateName: "views/wanderlists/templates/gallery",
  name: "Bob"
});
view.appendTo("#message");

这里的工作示例:http: //jsfiddle.net/mgrassotti/VWmFq/1/

有关更多详细信息,请参阅Ember 指南:定义视图

于 2013-04-23T02:43:50.630 回答