我有一个带有 Rails 3.2.3 项目的 Backbone.js,它正在工作,但我想清理它并将模板放入单独的 JST 文件中。
我首先创建了一个目录来保存我的模板
<project>/app/assets/templates/appointments
然后我在那里创建了一个名为“show.jst”的文件。
根据我的阅读,我不需要在 Rails 3.2.x 下安装 Jammit,所以我继续尝试将以下代码转换为使用外部模板文件:
window.AppointmentView = Backbone.View.extend({
template: _.template('<h3><%= topic %></h3>'),
render: function(){
var attributes = this.model.toJSON();
this.$el.html(this.template(attributes));
return this;
}
});
到目前为止,这是我的尝试:
window.AppointmentView = Backbone.View.extend({
render: function(){
var attributes = this.model.toJSON();
var html = JST['appointments/show'](attributes);
this.$el.html(html);
return this;
}
});
在我的 show.jst 文件中,我有以下内容:
<h3><%= topic %></h3>
(主题是我的“约会”模型中的一个字段)
这不会在屏幕上显示任何错误,也不会在屏幕上打印任何内容。
我该如何解决这个问题,以便我可以使用外部模板文件?
更新
我已经确保在所有其他 require 语句之前我有 required_tree ./templates 或 ../templates (取决于我正在测试的位置),如下所示:
#= require jquery
#= require jquery_ujs
#= require backbone-rails
#= require_tree ../templates
#= require_tree ./models
#= require_tree ./collections
#= require_tree ./views
#= require_tree ./routers
我试过把我的 show.jst 模板文件放在下面
应用程序/资产/javascripts/模板/约会/show.jst
应用程序/资产/模板/约会/show.jst
我尝试将文件命名为 show.jst.ejs 并在我的 Gemfile 中包含 gem 'ejs'。
这些都没有加载模板。将我的模板存储在 app/assets 下时,我确保它在我的路径中,并带有以下内容:
config.assets.paths << "#{ Rails.root }/app/assets/templates"
这也无济于事,但确实消除了 Sprockets 错误。
我仍然无法加载模板 jst 文件,并且我阅读的所有内容都暗示了不同的方式。我已经尝试了很多,也许它们与 Rails 3.2.3 不兼容。