考虑到类似问题已在此处得到解答,我想知道data-bind='foreach: list'
当列表为空时如何在 Knockout 中显示默认文本或 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
内容。
一种是在 simple 中提供一个包装器if
,如下所示:
<!-- ko if: xyz().length -->
// foreach
<!-- /ko -->
<!-- ifnot: xyz().length -->
// default text
<!-- /ko -->
然而,这并不是特别优雅——大量的代码混乱。