Как использовать 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'}) %>
Другие вопросы по тегам