Erneutes Einfügen eines Datensatzes in einen extJS-Speicher

9

Der Code

%Vor%

Das Ziel

Wenn der Benutzer auf die Schaltfläche "Kopieren" klickt, wird dieser Geschäftsdatensatz im Speicher gespeichert, seine "start_time" wird auf das aktuelle Datum und die aktuelle Uhrzeit gesetzt und als neuer Datensatz in den Informationsspeicher eingefügt.

Das aktuelle Ergebnis

Ich erhalte den folgenden JS-Fehler: Uncaught TypeError: Die Eigenschaft 'data' von undefined

kann nicht gelesen werden

Meine Frage (n)

Für den Anfang bin ich nicht einmal sicher, ob ich den Datensatz der aktuell ausgewählten Reihe richtig ergreife. Zweitens habe ich keine Ahnung, was die Fehlermeldung bedeutet.

Jede Hilfe wird wie immer sehr geschätzt.

Danke.

Update 1

Nach ein paar Optimierungen, hier ist was ich herausgefunden habe (dieser modifizierte Code für den Copy Button Handler)

%Vor%

Folgendes mache ich:

  1. Beende das Bearbeiten des Rasters
  2. Holen Sie sich die Anzahl der Datensätze, die sich derzeit im Geschäft befinden
  3. Besorgen Sie sich den aktuell ausgewählten Datensatz und speichern Sie ihn im Speicher
  4. Ergreifen Sie den Datensatztyp aus dem Geschäft
  5. Erstellen Sie eine neue Instanz des Geschäftsdatensatztyps und übergeben Sie das Datenobjekt aus dem ausgewählten Datensatz. Das Datenobjekt entspricht dem Objektliteral, wenn Sie einen neuen Datensatz von Hand erstellen (siehe meinen ursprünglichen 'add button' Code für Details)
  6. Ändern Sie den Wert für start_time des neuen Objekts, das erstellt wurde, auf das Datum und die Uhrzeit von heute
  7. Datensatz in das Gitter einfügen
  8. Gute Zeit!

Bitte kritisieren Sie diesen Code und lassen Sie mich wissen, ob es einen besseren Weg gibt, es zu tun. Danke!

Update 2:

%Vor%

Ich habe den Code aktualisiert, um die Methoden zum Kopieren und Hinzufügen zu verwenden, und es funktioniert. Wenn ich die add () - Methode aufrufen, erhalte ich jedoch einen "e is undefined error", aber wenn ich die Seite aktualisiere, wird der Datensatz trotz der Fehlermeldung eingefügt. Ideen?

    
Levi Hackwith 27.11.2010, 02:44
quelle

2 Antworten

3

Sieht für mich so aus, als würde es das tce -Objekt nicht korrekt erstellen. In dieser Zeile sollten Sie Ihren Haltepunkt setzen:

%Vor%

Es scheint, als ob es erfolgreich ein timecardEntry erstellt, das irgendwie kein richtiger Datensatz ist. Es kann hilfreich sein, wenn man genau weiß, wozu es konstruiert.

Wenn es nicht offensichtlich ist, dass es so auf dem Weg nach oben ist, versuchen Sie es so, wie @timdev es vorschlägt:

%Vor%

(Sie können grid.store.add(tce) anstelle von insert aufrufen, wenn Sie am Ende einfügen.)

    
wombleton 29.11.2010, 02:26
quelle
1

Wirklich gut geschriebene Frage. Guter Teil des relevanten Codes und eine nette Erklärung dessen, woran Sie hängen bleiben. Leider sehe ich nichts, was auffällt.

Dein Skript sieht größtenteils richtig aus. Du bist nahe dran zu sein, wo du sein musst.

Unten ist eine Antwort, die ich gerade eingegeben habe, und dann Ihre Frage (und den Code) erneut gelesen habe und ein wenig besser gedacht habe. Sie kennen dieses Zeug wahrscheinlich schon, aber es ist für jeden anderen da. Es ist auch relevant, weil ich keine Fehler im relevanten Teil von dem sehe, was du getan hast, also hast du es wahrscheinlich woanders geblasen. Die Fragen sind: Wo und wie?

Hoffentlich wird jemand, der weniger erschöpft ist als ich, mitkommen und das offensichtliche Problem finden, in der Zwischenzeit, hier ist mein Gekritzel über das Debuggen in Ext und warum:

Sie haben etwas Wichtiges vergessen oder übersehen. Die Fehlermeldung, die Sie erwähnt haben: Uncaught TypeError: Cannot read property 'data' of undefined - wo passiert das? Es sieht so aus, als ob es nicht in dem Code passiert, den du gepostet hast, es könnte sehr wohl in den Tiefen von ExtJS passieren.

Also, starte FireBug und aktiviere die "Break on Error" -Funktion. Machen Sie Ihren Fehler, und schauen Sie sich den Bereich "Stack" auf der rechten Seite an (normalerweise). Der Stack zeigt dir, wie du zu dir gekommen bist.

Es sei denn, ich verpasse etwas (und da ich nur deinen Code in meinem Kopf verfolge, kann ich sehr gut sein), ist wahrscheinlich etwas falsch konfiguriert, das deinen Fehler verursacht.

Aber wie bei jedem Programm (und besonders bei ExtJS, meiner Erfahrung nach) ist der Debugger Ihr Freund.

Mach das:

  • Verwenden Sie die -debug Version von ext-base.js und ext-all.js (bis alles funktioniert)
  • Verwenden Sie Firebug und "brechen Sie auf Fehler"
  • Erfahren Sie, wie Sie den Debugger verwenden, um durch den Code zu gehen und die Daten zu beobachten, auf denen Sie gerade arbeiten.
  • Gib nicht auf, wenn du dich tief in den Tiefen von ExtJS befindest. Wenn du es versuchst, wirst du anfangen, ein Gefühl für WTF zu bekommen, und selbst wenn du es nicht alles verstehst, wird es dir Hinweise geben, wo du es vermasselt hast.
timdev 27.11.2010 07:57
quelle

Tags und Links