10
votes

Actualiser les données KNockOutjs dans DataTables

J'ai le tableau suivant

else
{
    /* Array or flat object mapping */
    return function (data) {
         return data[mSource];
    };
} 


4 commentaires

Même problème ici. Avez-vous trouvé une solution?


@Petter - J'ai trouvé un moyen autour du problème, mais cela implique de reconstruire le datatable à partir de zéro. Fondamentalement, la table HTML est stockée dans une vue partielle que je recharge à chaque fois que je dois actualiser les données. Lors de chaque rechargement, j'appelle ensuite le plugin ".Datatable ()" sur cette table. Ouais, c'est un peu de long chemin de mettre à jour le contenu, mais c'est vraiment rapide au niveau de l'interface utilisateur. Pas de vrai ralentissement.


FWIW - J'ai eu un avertissement de Kaspersky quand j'ai essayé d'accéder au lien Joshbuckley. "Objet http malveillant ... détecté: programme Trojan:" Heurtre: Trojan.script.Iframer "(modification)".


@ mg1075 acclamations pour l'avertissement - j'ai mis à jour mon texte de questions pour souligner que l'URL n'est plus en sécurité.


3 Réponses :


1
votes

Vous mentionnez que vous avez utilisé un plugin de jeu de données et obtenez "paramètre inconnu demandé" 0 'à partir de la source de données pour la ligne 0 "Erreur.

Dans mes expériences précédentes à l'aide de DataTable sans knockout plugin, j'ai reçu cette erreur en utilisant plus de colonnes que les définitions d'en-tête ou vice versa. Vous devez vérifier votre chapitre TODY et THEAD et vous assurer que les deux ont la même taille.

ou peut-être que vous utilisez "AOCOLUMNDEFS" option lorsque vous initialisez la table.again vérifié l'option défini-en -nent et assurez-vous de ne pas essayer d'atteindre la colonne inconnue:

par exemple si Vous avez une définition comme celle-ci xxx

et si vous n'avez que 2 section de THEAD, cela vous donnera cette erreur. Parce que vous atteignez une troisième colonne avec Atargets: [2]


1 commentaires

Acclamations pour cela. J'ai trouvé une solution de contournement que je publierai ici quand je gt plus de temps. Fondamentalement, cela implique de charger les données pour le tableau sous la forme d'une vue partielle ASP Net MVC; J'utilise ensuite jQuery pour charger le code HTML de cette vue partielle dans la table principale div sur ma page. J'appelle ensuite la méthode DATATABLE 'CODE> .DataTable () pour réinitialiser la table.



0
votes

Je rencontrais un problème similaire que vous avez décrit ici (et je n'avais aucune intention d'explorer le lien "Liaisons" après l'avertissement de Kaspersky, même s'il est vraiment sûr.)

aller un peu sur L'approche suggérée ici knockoutjs - Comment utiliser des fichiers de données avec la table liée existante , j'ai fini par prendre un itinéraire où en utilisant Knockout sur la table, j'ai ajouté un knock-out si l'instruction teste si l'observataire avait au moins une ligne de données. xxx

Lors du chargement du modèle de vue, j'ai ensuite appelé la fonction Datables à l'intérieur de la fonction de réussite .ajax.

Puis l'autre partie pour le faire fonctionner était d'utiliser des datatables "bstatsave": true , de sorte que tout tri que j'avais fait avant une rafraîchissement ne serait pas perdu.


0 commentaires

3
votes

Je sais que c'est un fil plus ancien, mais depuis que je l'ai trouvé quand j'avais le même problème, je ressens la nécessité de poster la solution afin que d'autres puissent le trouver plus rapidement.

Lorsque vous rafraîchissez la table, vous pouvez simplifier .clear () code> puis .Destroy () code> la table. Après cela, il suffit de réinitialiser la table à l'aide du déjà connu .Datable () code> p>

Bien que c'est un peu désordonné parce que vous déchirez vraiment la structure et de la reconsurée, il fonctionne très bien. P>

Il vous suffit d'ajouter un identifiant booléen que vous avez défini sur True la première fois que vous initialisez la table. Et bien sûr, vous devez lier la table à une variable pour pouvoir fonctionner la magie de l'API DataTable sur l'élément DOM. P>

    userTable = $("#userTable").DataTable({responsive: true});
            usersLoaded = true;


0 commentaires