Handlebars 1.x和2.x API之间有什么区别?

时间:2014-07-09 19:55:24

标签: handlebars.js compatibility

我们目前正在使用Handlebars 1.3.0版本,我想知道为了能够升级到2.x版本,我们需要更改什么。由于HandlebarsJS团队致力于语义版本控制,我知道必须有一些重大变化,但我没有在README.md中看到它们。 changelogs for the v2.0.0-alpha.N releases中列出了一些项目,但我不清楚这是否是完整列表(或者在2.0.0 final发布之前是否存在完整列表)。一些1.x版本也有“兼容性”部分,但我相信它们都是非破坏/向前兼容的。

任何人都可以对API差异或2.x系列的目标/改进提供一些见解吗?

  

兼容性说明

     
      
  • 在IE8及以下版本下运行编译器需要JSON polyfill。建议使用预编译器代替在这些传统环境中运行编译器。   
  •   
  • helperMissing helper不再具有索引名称参数。现在可以通过options.name。
  • 获得帮助程序名称   
  • 预编译器输出已更改,这会破坏与早期版本的运行时和预编译输出的兼容性。
  •   
  • JavaScriptCompiler.compilerInfo现在返回通用对象而不是javascript源。
  •   
  • AST更改   
        
    • INTEGER - > NUMBER
    •   
    • 其他PartialNode哈希参数
    •   
    • 新RawBlockNode类型
    •   
  •   
  • 数据框现在有一个_parent字段。这是内部的,但由于性能/兼容性原因而可以枚举。
  •   

更新:来自2014年10月16日的ember.js blog

除了上面提到的变化之外:

  

现在删除仅包含块语句和空格的行。     这与Mustache规范相匹配,但可能会导致代码出现问题     空白存在但不会存在。

1 个答案:

答案 0 :(得分:8)

如果你看看官方Release Notes的v1.3.0和v2.0.0-alpha.1版本的Handlebars之间的变化,你会看到,这是两个主要的变化,会在升级过程中破坏你的模板。 / p>

  1. 预编译器输出已更改,这意味着1.x预编译模板与Handlebars 2.x运行时不兼容,以及2.x运行时将与旧模板不兼容。您应该更新预编译器,更新运行时并更新所有模板。
  2. Partials不再可以访问父上下文(../),但现在可以接受hash作为参数,并且可以通过@root变量访问根上下文。因此,请查看部分内容以使用../并将其更改为使用本地数据,并将其作为参数传递给partial。
  3. 所以,这是升级到2.x Handlebars版本时应该注意的主要事项。内部更改会影响helperMissing助手,JavaScriptCompiler.compilerInfo,更新 AST 数据框。但所有这些仅对于使用自己的叉子或在运行时进行一些修改的用户才有意义。其他变化主要是错误修正。