【问题标题】:Slim template interprets {{myJsVar}} as HTML attribute groupingSlim 模板将 {{myJsVar}} 解释为 HTML 属性分组
【发布时间】:2013-07-16 21:33:09
【问题描述】:

我正在使用 Angularjs 和 Slim,但我想弄清楚如何提出更简洁的语法。

我想做:

td {{content.name}}
td {{content.body}}
td {{content.owner}}

但它给了我一个错误。很可能是因为{ 用于对 HTML 属性进行分组。我不得不把它改成这样:

td
  | {{content.name}}
td
  | {{content.body}}
td
  | {{content.owner}}

有没有更简洁的方法来做到这一点?

【问题讨论】:

  • 看看this answer。您可以更改 AngularJS 使用的插值标记。
  • 嗯,这仍然是个问题,因为 slim 会将其视为:<td {content.name=></td> 我认为更好的选择是修改 slim 以便它不使用 { 进行 html 属性分组.

标签: ruby-on-rails angularjs slim-lang


【解决方案1】:

slim 版本 2.0.3 中允许这样做的更改。

您可以在config/initializers/slim.rb中添加以下内容:

Slim::Engine.set_options :attr_list_delims => {'(' => ')', '[' => ']'}

这会从默认值中删除 {。请参阅the doc here 并在页面上搜索attr_list_delims

【讨论】:

    【解决方案2】:

    我不确定您是否认为它更简洁,但您可以将所有属性放在括号中。

    td() {{content.name}}
    td(otherattr=2 thisattr=3) {{content.body}}
    td() {{content.owner}}
    

    【讨论】:

      【解决方案3】:

      我最终修补了 Slim gem 本身。仅更改了 2 行。

      你可以在https://github.com/brennancheung/slim/tree/angularjs_support看到它

      并且可以使用以下方法将其包含在您的 Rails 项目中:

      gem 'slim', :git => 'git://github.com/brennancheung/slim.git', :branch => 'angularjs_support'
      

      【讨论】:

      • 感谢您这样做。我正在使用 PadrinoRB 和 BackboneJS 并且遇到了同样的“问题”。我让它的工作方式与您一开始的方式相同,但这绝对更干净。
      • 我担心这不会被维护......随着未来的苗条迭代
      • 您介意分享您的答案中哪些行发生了变化吗?谢谢!
      • @gwho 更改很简单,但我花了一些时间才找到。您可以检查我的 fork 中的最后一次提交以查看更改 (github.com/brennancheung/slim/commit/…)。这些天我主要使用 Node.js,所以我不打算维护它,但其他人应该很容易接管它。我最初尝试添加一个配置选项,以便在不破坏兼容性的情况下轻松合并拉取请求,但它看起来需要更多工作并且需要重新架构。 :(
      • 我建议更新答案,因为修复已合并 github.com/slim-template/slim/pull/434 。配置选项是:Slim::Engine.set_default_options :attr_delims => {'(' => ')', '[' => ']'}
      【解决方案4】:

      我知道这是一个老问题,但现在有一个完美的解决方案。最新的 slim 支持自定义 attr_delims 选项。我不知道它是什么时候添加的,但是 v2.0.3 有。通过命令行,您可以使用:

      slimrb -o "attr_delims={'(' => ')', '[' => ']'}" <file>

      或者如果你使用gulp-slim,你可以这样写:

      .pipe(slim({
        pretty: true,
        options: "attr_delims={'(' => ')', '[' => ']'}"
      }))
      

      您可以参考文档here

      【讨论】:

        【解决方案5】:

        关于其他变体,但我仍然不满意,是这样做的:

        td ng-bind="content.name"
        td ng-bind="content.body"
        td ng-bind="content.owner"
        

        我倾向于自定义 slim 以便它不使用 { 对 HTML 属性进行分组。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-20
          • 2015-07-08
          • 1970-01-01
          • 1970-01-01
          • 2019-09-29
          • 1970-01-01
          • 2013-08-13
          • 1970-01-01
          相关资源
          最近更新 更多