【发布时间】:2013-05-31 19:54:14
【问题描述】:
考虑到similar questions have been answered here,我想知道当列表为空时如何在Knockout 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 中提供一个包装器,如下所示:
<!-- ko if: xyz().length -->
// foreach
<!-- /ko -->
<!-- ifnot: xyz().length -->
// default text
<!-- /ko -->
然而,这并不是特别优雅——大量代码混乱。
【问题讨论】:
-
你可以根据列表是否为空来显示一些特定的div