Как использовать include /partials в файлах Rails 3 Backbone ejs.jst
Я использую гем backbone-on-rails с javascript (в отличие от coffeescript) для визуализации представлений для модели. Все работает нормально, но мой код вида довольно длинный, поэтому я хотел бы изменить методы использования include /partials.
Вот мой код:
в моем файле views/model_show.js
AppName.Views.ModelNameShow = Backbone.View.extend({
template: JST['main'],
initialize: function() {
this.render();
},
render: function() {
this.model.fetch({async:false});
$(this.el).html(this.template({ model: this.model }))
$('#main_content').html(this.el);
}
});
в моем файле шаблонов я хотел бы, чтобы что-то вроде этого в templates/main.jst.ejs
<% if(this.model) { %>
<h2> model found</h2>
<%- include top_section %>
<%- include middle_section %>
<%- include bottom_section %>
<% } else { %>
<h3>Claim not found <a href='#'>Back</a></h3>
<% } %>
где top_section будет файлом в шаблонах (например, templates/top_section.jst.ejs)
Проблема в том, что я продолжаю получать следующие ошибки (вывод firebug).
Ошибка синтаксиса: отсутствует) в круглых скобках [Прервать эту ошибку]
... 2> модель найдена \n\t',(''+ include top_section).replace(/&/g, '&'). Replace (/
которая вызывает эту ошибку, потому что шаблон не отображается
TypeError: this.template is not a function
[Break On This Error]
$(this.el).html(this.template({ model: this.model }))
Я должен отметить, что я пробовал несколько разных синтаксисов, подобных приведенному ниже, но они просто выдают разные ошибки.
<%= include top_section %>
<%- include(top_section) %>
заранее спасибо
2 ответа
На данный момент я просто создал хеш шаблонов и перечислил их в рендере. Не идеально, но работает на данный момент. Вот как выглядит код сейчас.
файл views/model_show.js
AppName.Views.ModelNameShow = Backbone.View.extend({
templates: {
top_section: JST['top_section'],
middle_section: JST['middle_section'],
bottom_section: JST['bottom_section']
},
initialize: function() {
this.render();
},
render: function() {
this.model.fetch({async:false});
var zuper = this;
$.each(this.templates, function(key, value) {
//iterate over each template and set the html for the div with id=key with template
//For example $('#top_section).html(JST template for top_section)
$('#' + key).html(zuper.templates[key]({ model: zuper.model }))
})
}
});
Теперь файл шаблона выглядит следующим образом.
<% if(this.model) { %>
<h2> model found</h2>
<div id="top_section"/>
<div id="middle_section"/>
<div id="include bottom_section"/>
<% } else { %>
<h3>Model not found <a href='#'>Back</a></h3>
<% } %>
Как я уже сказал - не идеальный, но функциональный обходной путь на данный момент.
В EJS правильный синтаксис для партиала таков:
<%= this.partial({url: 'templates/partial.ejs'}) %>