同様の質問がここで回答されていることを念頭に置いてdata-bind='foreach: list'
、リストが空の場合にノックアウト内にデフォルトのテキストまたは HTML を表示する方法を考えていました。
リンクされたページのソリューションは、これとはまったく一致していないようですが、いずれにせよ、次のようなカスタムバインディングでこれを達成しようとする別の方法を考えました:
text.default = {
update: function (element, valueAccessor) {
var $e = $(element),
obs = valueAccessor();
function _check_blank() {
// the element has content - so we do nothing
if ($e.text().trim()) {
return;
}
// the element is empty;
$e.text("Default Text")
}
// we use setTimeout to ensure that any other bindings complete
// their update
setTimeout(_check_blank, 0);
}
}
これは単純なオブザーバブルではかなりうまく機能するようですが、バインディングでは機能しませんが、いずれにせよ、上記のリンクの提案はいくつかの理由でおそらく望ましいforeach
と思います.上記のコードにはいくつかの注意事項があります. extender
それにもかかわらず、私はこの例をここに入れました。
そうは言っても、foreach
コンテンツの代わりにデフォルトを提供するためにどのようなオプションがあるか知りたい.
if
1 つは、次のように単純な でラッパーを提供することです。
<!-- ko if: xyz().length -->
// foreach
<!-- /ko -->
<!-- ifnot: xyz().length -->
// default text
<!-- /ko -->
ただし、これは特に洗練されたものではありません。多くのコードが乱雑です。