Rails使用单个模板(Handlebars或Mustache)与Sammy.js进行客户端/服务器端呈现

我在网上搜索了一段时间寻找教程,但没有太多运气。

根据我的理解,Twitter在rails中使用单个Mustache.js模板在第一页加载时从服务器渲染,然后通过他们自己的ajax过渡系统(很像sammy.js)。

我可以在rails中加载把手和sammy.js,但我无法弄清楚如何从服务器(rails)和客户端(sammy)方面共享单个模板文件。

我没有亲自构建任何我使用相同模板服务器端和客户端的东西,但这是我能想到的一种方法。

假设你有一个图像部分(_image.mustache):

 

当您渲染页面服务器端时,您可以将其用作普通部分并为Mustache插入它。 然后,您还可以在脚本标记中呈现它以使用Resig微模板方案 。

 {{{image_js_template}}} 

在您的Mustache视图类中:

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

这应该使模板不插入({{仍然在文本中)。 现在你可以通过它的id在你的Javascript中选择这个模板。 在backbone.js中,您可以执行以下操作:

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

我没有使用过Sammy.js,但似乎它希望所有的模板都是公开的,这可能会出现问题。 但是,您仍然可以使用上面的技术并直接传递render()和partial()jQuery对象(如此处所示)。

这是基本的想法,但是你可以做很多事情来使这更加无缝。 我会查看关于使用模板的Jammit部分 ,特别是关于使用Mustache的部分。 ICanHaz.js还有一种简化客户端Mustache模板使用的方法。