0

我正在尝试使用带有类似小胡子的语言的 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, thenaValue将被视为帮助程序并以不受欢迎的值调用,例如{ data: Object, hash: '', name: '...' }. 显然,人们不希望他们的模板语言这样做。与 Nunjucks 类似,Handlebars 没有办法修改上下文查找以自动调用ko.unwrap.

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

有没有人在使用类似 Mustache 的库和 Knockout 方面有任何经验并解决了这种关系(包括哪些 mustache 库最合适)?

4

1 回答 1

0

FWIW,我最终使用了dust.js,并thenable通过添加一个then函数来制作ko.subscribable ko.subscribable.fnthen在dust.js的下一个版本中优先考虑分辨率)。

于 2016-07-04T14:34:03.787 回答