2011-03-10 18 views
38

林进入Backbone.js的构建JavaScript代码为我的项目,我爱HAML对后端(铁轨)模板,所以我还想用它为骨干视图模板。我知道有几个HAML端口用于Javascript,如 https://github.com/creationix/haml-js,骨干支持JST和小胡子。最好的策略使用HAML模板与Backbone.js的

最好的方法是使用haml模板代替。

在客户端使用HAML有什么缺点吗?性能方面,额外的脚本加载时间(按资产打包工具,如jammit照顾)

回答

26

我知道你已经提到过它,但我会建议在Jammit中使用haml-js。只需在您的javascript和assets.yml中添加haml.js,并添加template_function: Haml以及将您的模板文件包含到包中即可。例如

javascript_templates: 
    - app/views/**/*.jst.haml 

然后在你的观点,你才能有这个包(= include_javascripts :javascript_templates)和Jammit将到window.JST['file/path']包的任何.jst.haml文件。 (如果您查看网页的源文件,你会看到类似<script src="/assets/javascript_templates.jst" type="text/javascript"></script> JavaScript文件)

要使用这些模板只需调用这些JSTs Jammit创建之一。即

$('div').html(JST['file/path']({ foo: 'Hello', bar: 'World' })); 

Jammit将使用Haml-js模板函数函数来呈现模板。

注:一定要指向Jammit的GitHub库在你的Gemfile得到支持必要的HAML-JS工作换行符的最新版本。

+0

谢谢,我试了一下,并将其标记为答案,如果它工作 – 2011-03-25 23:47:21

+0

[Jammit不支持换行符](https://github.com/documentcloud/jammit/issues/127)的问题已解决,应包括在内在下一个版本中。 – rubiii 2011-04-10 15:09:14

+0

是否有使用.jst文件的教程?我不会不自信地告诉你如何在打包后使用它们。我习惯做'$(“#template_name”).tmpl(data,helper)'。你如何获得由jammit包装的模板? – picardo 2011-04-10 18:35:26

-3

你可以尝试用快递玉(Haml的类模板)。 Express构建在Connect上,用于路由静态文件。玉是我和Node.js的尝试更快的模板引擎之一

http://expressjs.com/

+0

我的问题是关于HAML和Backbone的。 – 2011-03-10 02:03:27

+0

我认为这篇文章回答你的问题http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-实时聊天应用/ – 2011-03-10 02:06:58

+0

该页面甚至没有提到HAML,所以我不认为它回答了这个问题。 – 2011-03-10 03:15:01

6

我知道这将一定程度上绕来绕去的问题,但在这里我们去:)

我我的Rails应用程序我使用haml适用于后端的所有视图。太棒了。由于某些原因(主要是i18n),我不喜欢在客户端使用模板。这是我如何做到这一点:

  • 在ruby haml中创建所有模板,并将它们存储到带有时髦类型(我使用text/js-template)的脚本标记中。这将创建prerendered html,你可以使用jQuery和主干来玩。
  • 当您创建骨干观点,加载存储的模板并将它添加到您的文档
  • 通过改变已有的模板

你只用HTML渲染处理您的视图和jQuery是真棒为。对于一些不需要i18​​n的视图,我使用下划线模板,因为它已经在那里。

至于HAML模板的表现,似乎胡子和车把速度更快。

+1

我以前使用过这种策略,我会在我的html中隐藏的元素中存储prerendered html模板,并将其克隆并填充数据,但它的丑陋而不是DRY代码,因此我对模板感兴趣。我喜欢小胡子的无逻辑前提,但我喜欢HAML语法。我希望有一种方法可以在客户端以某种方式使用它 – 2011-03-10 20:19:27

+0

您的AJAX模板不会像写入部分一样吗? – rxgx 2011-03-16 03:34:57

1

我无法在Craig的主题上回答内联(我在猜测我需要某种声望来发布现有答案),但是您不再需要抓住一堆jammit来使用haml-js--承诺成为jammit的主要分支。看到这里的详细信息:https://github.com/documentcloud/jammit/commit/b52e429f99cac3cd1aa2bf3ab95f1bfaf478d50d

编辑:最后的宝石版本是在1月,并提交在3月添加,所以你需要设置捆绑器运行对github回购或在本地建立它。如果你没有使用头文件,你将无法正确解析模板,因为换行符被删除。

所有我需要做的设置此是:

1)以下内容添加到我的 “assets.yml” 文件:

template_function: “Haml的”

2)添加引入haml-JS源和模板,我想加载到我的资产文件: 的JavaScript: 核心: - 大众/ Java脚本/供应商/ haml.js 模板: - 应用程序/视图/事件/ _form.haml.jst

3)确保我加载核心和模板在我application.html.erb

<%=使用include_javascripts:核心:模板%>

通过JST在我的源文件

4)访问模板[文件名](即,在这种情况下JST ['_ form'])。值得一提的一个问题 - jammit会查看所有的模板并将它们命名为共享路径,所以如果你有app/views/foo/file.jst和app/views/bar/file.jst,你可以访问与JST ['foo/file.jst']和JST ['bar/file.jst']。如果你有app/views/foo/file1.jst和app/views/foo/file2.jst,他们会直接在JST ['file1.jst']和JST ['file2.jst'] - 这是当你开始使用前几个模板时,容易忘记。

一切都很好。我不确定为什么Craig需要定义一个函数 - 我只使用了haml.js提供的默认Haml函数,但也许我错过了一些东西。

+0

这很了解。我认为我见过你在YC讨论骨干(我真的了解它) – 2011-04-06 21:19:36

+0

感谢您的阐述。我更新了我原来的帖子。我最初创建了一个函数,因为我遵循使用Mustache模板的jammit帮助。没有意识到我可以直接打电话给Haml :-P – Craig 2011-04-22 16:48:08

14

我即将给haml-coffee一枪。 (没有双关的意图)我不能唱赞美咖啡的足够;再加上它现在在Rails 3.1中是默认的。现在我可以在我最喜欢的模板语言中嵌入咖啡脚本,并预先编译这些内容。

哦,现在让它开始工作吧。

+2

我最近给了[haml-coffee](https://github.com/9elements/haml-coffee)很多爱,并且完全符合HAML标准。另外,我创建了[haml_coffee_assets](https://github.com/netzpirat/haml_coffee_assets),以便在Rails 3.1资产管道中使用haml-coffee模板。 – Netzpirat 2011-11-25 16:27:48

+3

现在,这比“官方”的答案要好得多,看看它是如何与资产管道一起使用的(就我所能分辨的那样)。我只是一直在玩它,但到目前为止,这看起来正是我所需要的。与Backbone,Haml,Coffeescript,资产管道畅玩。爱它! – nzifnab 2012-03-22 20:30:28

+0

haml_coffee_assets三声欢呼! – Duke 2012-04-19 08:28:53

2

我一直在研究Rails 3/Backbone应用程序,并在评估hamlbars,haml_assets和玩haml-js后采取了不同的方法。

这些都是为问题提供解决方案的固体宝石,每个宝石都有一定的权衡。例如,Haml-js需要渲染模板客户端(这没什么不妥,只是一个折衷)。 Hamlbars和haml_assets都插入到资产管道中,但因为它们存在于请求对象之外,所以一些帮助器将不起作用。两者都对此进行了一些调整,并包含url助手和ActionView助手,但不要指望具有与在视图中编写haml相同的功能。

我的方法有点笨重(我打算把它放到引擎中),但它运行良好且易于复制。它采用haml_assets可能的情况下,却倒在从一个“模板”控制器服务模板与“秀”行动

  • 把你的意见在视图/模板/目录
  • 您可以添加一个布局呈现这种观点为JST功能
  • 您可以编写模板
  • 您可以添加脚本标签为“时指定节目行动回报“应用程序/ JavaScript的”为内容类型
  • 您可以访问所有的助手/模板/无论“将呈现任何模板,或使用路线通过更好的有组织的意见。

这种方法的好处是,因为您的视图可以从控制器访问,所以您可以选择将它们呈现为jst模板(通过模板控制器)或通过其他控制器呈现为部分。这将允许你直接从网址(比如/ products/widgets/super-cool-widget)为用户提供seo-friendly页面,用户可以获得缓存的模板/模板/小部件/超酷小部件。

+0

请问您能解释您是如何获得所有帮助者的? – theotheo 2012-10-06 19:11:50