2009-10-27 19 views
0

Je travaille en utilisant la bibliothèque scriptaculous. Cependant, je suis confronté à quelques problèmes avec l'inclusion de la bibliothèque JSON pour la bibliothèque prototype. Il ajoute une méthode toJSONSTring et parseJSONSTRING à tous les objets automatiquement et franchement cela provoque des ravages à certains endroits. Comme je n'arrive pas à utiliser la fonction Ajax Updater et je suppose que c'est à cause de cette méthode toJSONSTring qui a été attachée à mon objet options que je lui passe. Y at-il un moyen de désactiver ou d'au moins supprimer une fonction qui a été ajoutée à l'objet.Ajax ne tire pas sur le prototype - Je pense que j'ai besoin de désactiver ou de supprimer une méthode javascript - causant des ravages!

EDIT :::

En fait, je suis en train de faire une demande de paiement ajax et je suis face à un problème dans la

Ajax.Updater = Class.create(Ajax.Request,.... 

partie de la bibliothèque prototype. A la partie où son supposé exécuter et poster une requête AJAX, il ne fonctionne pas - en particulier à:

$super(url, options); 

Pour être plus précis que je utilise cette grille de table triables et modifiable ici à cette adresse: http://cloud.millstream.com.au/millstream.com.au/upload/code/tablekit/index.html

Fondamentalement, vous cliquez sur une cellule de tableau pour l'éditer et appuyez sur le bouton OK pour confirmer. En cliquant sur le bouton une requête ajax est faite.

La fonction modifiable de la table appelle l'Ajax updater comme suit dans une fonction d'envoi:

submit : function(cell, form) { 
     var op = this.options; 
     form = form ? form : cell.down('form'); 
     var head = $(TableKit.getHeaderCells(null, cell)[TableKit.getCellIndex(cell)]); 
     var row = cell.up('tr'); 
     var table = cell.up('table'); 
     var ss = '&row=' + (TableKit.getRowIndex(row)+1) + '&cell=' + (TableKit.getCellIndex(cell)+1) + '&id=' + row.id + '&field=' + head.id + '&' + Form.serialize(form); 


     this.ajax = new Ajax.Updater(cell, op.ajaxURI || TableKit.option('editAjaxURI', table.id)[0], Object.extend(op.ajaxOptions || TableKit.option('editAjaxOptions', table.id)[0], { 
      postBody : ss, 
      onComplete : function() { 
       var data = TableKit.getCellData(cell); 
       data.active = false; 
       data.refresh = true; // mark cell cache for refreshing, in case cell contents has changed and sorting is applied 
      } 
     })); 
    }, 

Le problème est que la demande ne se fait jamais et je continuer à pousser le bouton OK en vain.

EDIT ::::::::::::::::

Je suis toujours perplexe ici - j'ai même essayé d'appeler la fonction Ajax.Updater moi-même et il a gagné » t travail du tout. C'est comme si cette fonction était officiellement rendue tout à coup inutile. J'ai fait les changements que vous avez dit, mais en vain: (Franchement, je suis à court d'options ici - une autre idée serait de laisser tomber cette table et chercher quelque chose d'autre qui a des fonctionnalités similaires dans l'espoir que cela puisse fonctionner!

Répondre

1

Vous pouvez supprimer quoi que ce soit à partir d'un objet à l'aide "supprimer":

a.toJSON = function() {}; 
delete a.toJSON; 
a.toJSON() => error: toJSON is not a function 
a.toJSON => undefined 

Cependant, je ne pense pas que ce qui se passe Happ ens à cause de ce que vous pensez qui se passe :) Peut-être donner plus de détails sur le problème que vous avez avec Ajax.Updater?


Vue de l'édition. OK, pouvez-vous également poster la ligne de code qui appelle Ajax.Updater et, aussi important, expliquer en détail comment l'objet d'options que vous alimentez est fait?

En outre, s'il vous plaît assurez-vous que vous faites quelque chose comme ceci:

new Ajax.Updater(stuff) 

et pas seulement:

Ajax.Updater(stuff) 

Vous devez créer un nouvel objet de mise à jour et utiliser « nouveau » (le plus probablement vous faites déjà cela, juste en faisant attention).


OK Je ne suis toujours pas sûr de ce qui se passe à Ajax.Updater puisque vous prolongez des choses que je ne vois pas, mais essayez ceci: enlever le « & » du commençant de la variable "ss"; dans l'objet options, utilisez les paramètres : ss au lieu de postBody: ss.

+0

RIghto - vérifier la mise à jour s'il vous plaît – Ali

+0

Ne pas aucune différence :(idées – Ali

+0

Désolé que ça n'a pas I. Je vous suggère de descendre dans les objets que vous passez à Ajax.Updater avec firebug ou quelque chose comme ça ... Je pense toujours que Updater étouffe sur quelque chose que vous lui passez parce que je l'ai utilisé avec scriptaculous et n'ai eu aucun problème. Je ne peux pas vous aider beaucoup parce que je ne peux pas voir assez. –

0
delete obj.property 

Dans ce cas:

delete obj.toJSONSTring; 
delete obj.parseJSONSTRING; 
2

Il semble que ces méthodes soient ajoutées au prototype d'Object. En ajoutant au prototype de l'objet, la bibliothèque donne automatiquement tout ce qui dérive de l'objet (en d'autres termes, tout) ces méthodes. Vous voudrez peut-être prendre quelques lectures sur l'héritage Prototypal en Javascript pour avoir une meilleure idée de cela.

Quoi qu'il en soit, vous pouvez supprimer ces méthodes en faisant ceci:

delete Object.prototype.toJSONString; 
delete Object.prototype.parseJSONString;