J'utilise JQuery QuickSearch pour rechercher une table qui est peuplée par Knockout foreach boucle.
L'élément QuickSearch doit être initié J'ai essayé d'utiliser "AfterRender", mais n'a pas pu déterminer si l'élément actuel est le dernier élément de la collection,
J'ai également essayé d'utiliser un reliant, mais j'ai eu une collection de longueur 0 au lieu de longueur 2005. P> SO: P> Voici mon point de vue: p>
function Container(data) {
var self = this;
self.id = ko.observable(data.Id);
self.code = ko.observable(data.Code);
self.typeName = ko.observable(data.TypeName);
self.parentClient = ko.observable(data.ParentClient);
self.client = ko.observable(data.Client);
self.deleteUrl = ko.computed(function () {
return "GetModal('/Containers/Delete/" + data.Id + "','containerModal');";
});
self.editUrl = ko.computed(function () {
return '/Containers/Edit/' + data.Id;
});
self.qrUrl = ko.computed(function () {
return '/Qr/Index/10?entity=' + data.Id;
});
}
function ContainersViewModel() {
var self = this;
self.containers = ko.observableArray([]);
self.counter = ko.computed(function () {
return self.containers().length;
});
$.getJSON("/Containers/Json", function (data) {
var containers = $.map(data, function (item) {
return new Container(item);
});
self.containers(containers);
});
};
ko.applyBindings(new ContainersViewModel());
5 Réponses :
Essayez de vous abonner manuellement sur les modifications de la matrice. En utilisant S'abonner Vous serez informé sur la modification de la matrice.
Si vous vous abonnez après l'appels d'allégement, Vous serez informé après le processus de rafraîchissement de la vue. P>
Voir Fiddle A> strong> p> J'espère que cela aide. p> p>
Merci Damien!, Mais ce n'est pas tout à fait ce que j'avais à l'esprit. Votre exemple ne fonctionnera que après avoir ajouté ou supprimer des éléments, mais ce n'est pas quelque chose que je ferai avec cette collection. La façon dont c'est maintenant, cela provient de la DB à la vue et d'être affichée. rien de plus. J'ai besoin que l'événement soit déclenché juste après que le dernier article soit rendu dans la boucle
Bonjour NIR, j'ai ajouté une minuterie pour simuler un appel WebService comme vous pouvez le constater que cela notifie après avoir rendu des articles. jsfiddle.net/bujmu/2
Utiliser l'extension des gaz, cette voie calculée sera appelée une fois après avoir fini de remplir le tableau:
self.counter = ko.computed(function () { return self.containers().length; }).extend({ throttle: 100 });
J'aime cette réponse. Si simple et ce dont je devais résoudre un problème similaire de la colonne de table, l'équilibrage de la colonne de table après chaque rangée a été rendue. Merci!
L'option de fixation de la liaison de Foreach peut faire ce que vous recherchez, la partie astuce est de pouvoir savoir que l'élément est le dernier. Cela peut être résolu à l'aide des arguments fournis comme indiqué dans http://jsfiddle.net/n54xd/ .
La fonction: p> sera appelée à chaque élément, mais le "si" s'assurera que le code ne fonctionne que pour le dernier élément. P> P>
Merci Ricardo!, Je l'ai essayé, mais cette expression: Des pensées ?
Mon mauvais - j'ai écrit accidentellement la fonction juste à l'extérieur de la vue de la vue elle-même (une chose du matin ..) Merci!
J'ai réussi à utiliser la réponse de Ricardo Medeiros Penna avec un seul petit Tweak. Je devais ajouter _LatestValue pour obtenir la valeur de la longueur et que cela fonctionne maintenant. P> p>
_LatestValue étant une variable privée. Pas sûr s'il serait prudent d'y accéder directement. Ainsi, en utilisant ceci.foreach () code> à la place. Pas vraiment une grande différence tho
this.mypostprocessingLogic = fonction (éléments, données) {var sicheingarray = ceci.foreach (); Si (sous-planifié [sous-créatiry.lengthreength - 1] === Données) Console.log ("liste est rendue"); }; code>
Addenda tardive, mais la déclaration IF dans la réponse de Ricardo ci-dessus devrait être:
if (this.foreach()[this.foreach().length - 1] === data) { //Your post processing logic }
Eh bien, c'est un peu en retard (5 ans, donner ou prendre), mais semble légitime. Merci!