Принимая во внимание, что здесь были ответы на подобные вопросы, мне было интересно, как можно было бы использовать текст по умолчанию или отображение HTML внутри нокаута data-bind='foreach: list'
всякий раз, когда список пуст.
Решения на связанной странице не совсем совпадают с этим, и в любом случае я думал о другом способе попытаться выполнить это с помощью настраиваемой привязки, например:
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 -->
Однако это не особенно изящно - много беспорядка кода.