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