口ひげのような言語でノックアウト スタイルのビュー モデルを使用しようとしています。
したがって、ビュー モデルは次のようになります。
var viewModel = {
aValue: ko.observable("boot")
}
口ひげのような言語でよくある問題は、モデルをアンラップしないことです。だから、例えば得る
mustache_lib.render("{{ aValue }}", viewModel)
=> "function (initialvalue) { function observable() { ..."
それは、特にヌンジャックで起こることです(それぞれのrender
機能を備えています)。
Nunjucks でフィルターを使用できるため、次のように動作します。
nunjucks.renderString("{{ aValue | unwrap }}", viewModel)
=> "boot"
unwrap
フィルターはどこにありますかko.unwrap
。しかし、私は構文のファンではなく、より良いオプションがあるかどうか疑問に思っていました. Nunjucks のコードを熟読したところ、コンテキスト内で検索されたすべての変数を自動的にアンラップすることはできないようでした。
Handlebars.js には (私の目には) 好ましい構文があります。
Handlebars.compile("{{ unwrap aValue }}")(viewModel)
=> "boot"
Unfortunately if you forget the unwrap
, then aValue
will be treated as a helper and called with an undesirable value, something like { data: Object, hash: '', name: '...' }
. Obviously one prefers not to have their templating language do this. Similar to Nunjucks, Handlebars does not have a way to modify the context lookups to automatically call ko.unwrap
.
Interestingly, Mustache.js will call any variable that is a function
(including, of course, observables). However it lacks a number of features in other libraries.
Has anyone had any experience with using Mustache-like libraries with Knockout and worked through the relationship (including which mustache libraries are most suitable)?