类似胡子的语言与淘汰赛观察者

时间:2016-06-08 20:17:27

标签: knockout.js handlebars.js mustache nunjucks

我正在尝试使用类似胡子的语言的Knockout风格的视图模型。

所以视图模型看起来像这样:

var viewModel = {
  aValue: ko.observable("boot")
}

类似胡须的语言相当普遍的问题是他们没有解开模型。所以有人会这样做。

mustache_lib.render("{{ aValue }}", viewModel)
   => "function (initialvalue) { function observable() { ..."

Nunjucks会发生什么事情(以及他们各自的render功能)。

可以使用Nunjucks的过滤器,因此以下工作正常:

nunjucks.renderString("{{ aValue | unwrap }}", viewModel)
   => "boot"

其中unwrap是过滤器,ko.unwrap。但是我不是语法的粉丝,我想知道是否有更好的选择。我仔细阅读了Nunjucks代码,似乎无法自动解包在上下文中查找的每个变量。

Handlebars.js有一个更好的语法(在我看来),例如

Handlebars.compile("{{ unwrap aValue }}")(viewModel)
   => "boot"

不幸的是,如果您忘记了unwrap,那么aValue将被视为帮助程序,并使用不需要的值进行调用,例如{ data: Object, hash: '', name: '...' }。显然,人们不愿意让他们的模板语言这样做。与Nunjucks类似,Handlebars没有办法修改上下文查找以自动调用ko.unwrap

有趣的是,Mustache.js将调用任何function的变量(当然包括可观察的变量)。但是它在其他库中缺少许多功能。

有没有人有使用Knockout的类似Mustache的库的经验并完成了这段关系(包括最适合的胡子库)?

1 个答案:

答案 0 :(得分:0)

FWIW,我最终使用了dust.js,并通过向thenable添加then函数来制作ko.subscribable ko.subscribable.fnthen分辨率优先于下一期发布的dust.js)。