similar questions have been answered hereということを念頭に置いて、リストが空のときにノックアウトdata-bind='foreach: list'
の中にデフォルトのテキストやHTMLを表示する方法を知りました。`foreach`が空のときノックアウトのデフォルトのテキスト
リンク先のページのソリューションは非常にこれをラインアップしていないようですし、どのような場合でも、私はこのようにカスタムバインディングでこれを実現しようとする別の方法を考えた:
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
バインディングでは機能しませんが、いずれの場合でも上記のリンクのアドバイスがおそらくいくつかの理由で好ましいと思われます。上記のコードにはいくつかの注意点があります。それにもかかわらず、私はここにこの事例を投げかけました。なぜなら、それは思考のための選択肢と食料を幾分強調しているからです。
これまでのところ、foreach
の代わりにデフォルトを提供するためのオプションについて知りたいと思います。
一つは、このように、簡単なif
にラッパーを提供することです:
<!-- ko if: xyz().length -->
// foreach
<!-- /ko -->
<!-- ifnot: xyz().length -->
// default text
<!-- /ko -->
しかし、これは特にエレガントではありません - コードクラッタがたくさん。
あなたがリスト空かない –