Pamiętając o tym, że similar questions have been answered here, zastanawiałem się, jak można mieć domyślny tekst lub wyświetlacz HTML wewnątrz nokautu data-bind='foreach: list'
, gdy lista jest pusta.Niedopuszczalny domyślny tekst, gdy "foreach" jest pusty
Rozwiązania na połączonej stronie nie dość wydaje się w jednej linii z tego, a w każdym razie myślałem o innym sposobem, aby spróbować osiągnąć z niestandardowego wiązania tak:
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);
}
}
ten wydaje się działać dość dobrze z prostymi obserwatorami, ale nie działa z wiązaniem foreach
, ale w każdym razie myślę, że sugestia extender
w powyższym linku jest prawdopodobnie lepsza z kilku powodów - powyższy kod miałby wiele zastrzeżeń. Niemniej jednak wrzuciłem tutaj ten przykład, ponieważ w pewnym stopniu podkreśla on alternatywę i pożywienie do przemyśleń.
Wszystko, co jest powiedziane, chciałbym wiedzieć, jakie mogą być opcje dostarczania wartości domyślnej zamiast zawartości w postaci foreach
.
Jedno jest dostarczenie opakowania w prosty if
, tak:
<!-- ko if: xyz().length -->
// foreach
<!-- /ko -->
<!-- ifnot: xyz().length -->
// default text
<!-- /ko -->
Jednak to nie jest szczególnie elegancki - partie kodu bałaganu.
można pokazać jakiś określony div oparciu jeśli lista jeżeli pusta czy nie –