Ko de texte par défaut lors de l' `foreach` est vide
En gardant à l'esprit que les mêmes questions ont été répondues ici, je me demandais comment on pourrait faire défaut au format HTML ou texte d'affichage à l'intérieur d'un knock-out data-bind='foreach: list'
lorsque la liste est vide.
Les solutions sur la page du lien ne semblent pas tout à fait à la ligne avec cela, et en tout cas j'ai pensé à un autre moyen pour essayer de faire cela avec une liaison personnalisée comme ceci:
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);
}
}
Cela semble fonctionner raisonnablement bien avec de simples phénomènes observables, mais il ne fonctionne pas avec le foreach
de liaison, mais en tout cas je pense que le extender
suggestion dans le lien ci-dessus est probablement préférable pour plusieurs raisons -- le code ci-dessus aurait un certain nombre de réserves. Néanmoins, j'ai jeté cet exemple ici car quelque peu les faits saillants d'une alternative et de la nourriture pour la pensée.
Tout cela étant dit, je voudrais savoir quelles options il y a peut être de fournir une valeur par défaut à la place de foreach
contenu.
Est de fournir un wrapper en un simple if
, comme ceci:
<!-- ko if: xyz().length -->
//foreach
<!-- /ko -->
<!-- ifnot: xyz().length -->
//default text
<!-- /ko -->
Cependant, ce n'est pas particulièrement élégant-beaucoup de code de l'encombrement.
- vous pouvez afficher un div en fonction de si la liste s'il est vide ou pas
Vous devez vous connecter pour publier un commentaire.
Knock-out vous donne
if
etifnot
liaisons. Vous avez juste à prendre un peu de recul à partir de l'élément avecforeach
; Son intérieur est juste pour chaque élément, de sorte que lorsqu'il n'en existe pas, il n'y a pas d'entrailles.Rédaction: Votre question est importante, car vide listes sont une occasion de dire quelque chose au lieu de montrer une ardoise vierge.
foreach
de liaison est juste un wrapper pour letemplate
de liaison; le contenu et la balise elle-même peut être modifié par le gestionnaire de modèle de façon arbitraire. Vous pouvez également noter les éléments virtuels dans la question que l'utilisationif
etifnot
--- l'optimiste à l'aspiration de la question était d'avoir une solution qui évite l'encombrement des balises où l'information est représenté du point de vue sémantique et logique discrète, unité indivisible (ce qui arrive à être - ou avoir - une liste). Des acclamations.<div data-bind="visible: pets.length == 0">There are no items.</div>
Le knock-out 3 extension Knock-Out Coups De Poing fournit un gestionnaire par défaut qui peut être utilisé quelque chose comme ceci:
Plus de lecture: KO coups de Poing de la Documentation
Je sais que vous avez demandé il y a longtemps,
mais peut-être qu'aujourd'hui, il peut aider quelqu'un;
Si vous le faites avec une observable tableau ou dépendantes observables (comme filtrer les résultats à partir d'une liste), la solution ci-dessus ne fonctionnera pas.
Vous pouvez utiliser cette méthode pour forcer KO pour passer par ce observables et voir si elle a changé à l'aide de "avec". À l'intérieur de cette boucle, vous devriez vérifier $longueur de données, si c'est 0, il n'y a pas de données à boucle sur 😉