Rails Клиентская / серверная отрисовка с использованием одного шаблона (руль или усы) с Sammy.js - PullRequest
4 голосов
/ 30 марта 2011

Я некоторое время искал в Интернете поиски учебника, но мне не очень повезло.

Насколько я понимаю, Twitter использует один шаблон Mustache.js в рельсах для рендеринга с сервера при первой загрузке страницы, а затем через собственную систему перехода ajax (во многом как sammy.js).

Я могу загрузить рули и sammy.js в rails, но не могу понять, как поделиться одним файлом шаблона со стороны сервера (rails) и клиента (sammy).

1 Ответ

4 голосов
/ 24 апреля 2011

Я лично ничего не создавал там, где использовал один и тот же шаблон на стороне сервера и на стороне клиента, но вот один из способов, которым я могу подумать, чтобы сделать это.

Скажем, у вас есть частичное изображение(_image.mustache):

<div class="image">
  <a href="{{ view_url }}">
    <img height="{{ height }}" width="{{ width }}" src="{{ src }}" />
  </a>
</div>

Когда вы визуализируете свою страницу на стороне сервера, вы можете просто использовать это как обычный частичный фрагмент и интерполировать его для Усов.Затем вы также можете отобразить его в теге сценария, чтобы использовать Схему микросхем Resig .

{{{image_js_template}}}

В вашем классе представления Усов:

def image_js_template
  content_tag :script, :type => "template", :id => "image-template" do
    render :text => self.partial('image')
  end
end

Thisдолжен сделать шаблон неинтерполированным (с {{по-прежнему в тексте).Теперь вы можете просто подобрать этот шаблон в своем Javascript по его идентификатору.В backbone.js вы можете сделать что-то вроде:

class Views.AllImageList extends Backbone.View
  initialize: (options) ->
    @template = $('#image-template').html()

Я не использовал Sammy.js, но, похоже, он ожидает, что все его шаблоны будут доступны для общественности, что может вызвать проблему.Однако вы все равно можете использовать описанную выше технику и передавать объекты render () и part () напрямую (как указано здесь ).

Это основная идея, но, вероятно, существуетмного вы могли бы сделать, чтобы сделать это более плавным.Я бы ознакомился с разделом Jammit по использованию шаблонов , в частности, с разделом об использовании усов.Также ICanHaz.js позволяет упростить использование шаблонов усов на стороне клиента.

...