JavaScript 如何 jammit 使用 haml 做 backbone 的 view template

yakjuly · 2012年03月14日 · 最后由 yakjuly 回复于 2012年04月06日 · 4207 次阅读

在一个场景中需要 不刷新页面的情况下完成用户的多种复杂交互。 用 backbone + hamljs 来做。

原因: backbone 的 model collection view 用起来比较方便。 model 可以监控事件 Collection 增强了数组的功能 hamljs 做 view 可以看起来很清晰

于是想用单独的文件来写 js 的 template。然后在页面上调用。 于是看到到人有人 jammit + hamljs 做 tempalte

方法是 Gemfile gem "jammit"

config/assets.yml template_extension: jst.haml template_function: Haml javascripts:
javascript_templates: - app/views/*/.jst.haml

/app/view/xxx.haml = include_javascripts :javascript_templates

结果渲染出这个东西

不知道这个路径他是怎么弄出来的。 另外说明上说 window.JST 会把所有的 js template 的文件加载进来。但是我没发现有这样的代码。

jammit 该怎么用呢? 看说明就很头疼。

看源码找到问题了

修改 config/assets.yml

embed_assets: on
  package_assets: off
  gzip_assets: on
  compress_assets:        on
  package_path:           packages


  template_extension: "jst.haml"
  template_function: Haml

  allow_debugging: on

  javascripts:
    core:
      - vendor/assets/javascripts/haml.js
    javascript_templates:
      - app/views/**/*.jst.haml

因为 javascript_include_tag 默认会给 字符串后面加上一个.js 所以,在解析时会报 404. 需要修改 jammit/controller 的 parse_request 方法

if params[:extension] =~ /(.*+)\.js$/
  @extension = $1.to_sym
else
  @extension = params[:extension].to_sym
end

这样就不会出问题了

=include_javascripts :core 就好了不是吗?不用 javascript_include_tag,而是用 include_javascripts。@yakjuly 顺带请教一个问题,我用 jammit+haml。但是在开发环境下不能打包,设了 package_assets:always 也没有用。而且 haml 会打包失败。请教是否碰到过此类问题,能不能提供一个简单的可运行 demo 让我参考一下,多谢。

@huangxiangdan 我之前的问题就是 用 include_javascripts 也出问题。 后来我看了一下 jammit 的源代码,自己写了一个 controller 提供 JST 这样的功能,就没有接着使用 jammit 了。 你说的 打包功能我还没有试用过。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号