Ich habe ein Problem, das mich nervt.
Ich habe ein Gitter und wenn ich auf einen Gegenstand dklicke, möchte ich ein Fenster öffnen, um diesen Gegenstand zu bearbeiten. Ziemlich normales Zeug. Das Problem ist, ich möchte sicher sein, dass der Datensatz auf dem neuesten Stand ist, weil andere Leute, die das Programm benutzen, es vielleicht geändert oder sogar gelöscht haben.
Ich könnte den Laden neu laden, aber ich möchte nur einen bestimmten Datensatz prüfen ... Also dachte ich, ich würde einfach die Daten holen, einen neuen Datensatz erstellen und den bestehenden im Laden ersetzen, aber ich möchte es wirklich wissen Der beste Weg dies zu tun
Denken Sie daran, RESTful Proxy ist keine Option für mich, obwohl ich nicht weiß, ob der Update-Vorgang in diesem Fall funktioniert (Server - & gt; -Client).
BEARBEITEN: das kann jemandem helfen: Alles, was ich tat, war, die Daten und Rohobjekte aus dem neuen Datensatz in den alten zu kopieren und dann die Änderungen zu "committen". hat für mich gearbeitet.
Danke.
Der beste Weg, um so etwas zu tun, wäre, den Datensatz in dem Ereignis neu zu laden, das das Fenster öffnet. Wenn Sie beispielsweise den Datensatz aus dem Rasterspeicher in ein Formular innerhalb des Fensters laden, können Sie Ihr Modell aus der ID laden.
%Vor%Nach dem Speichern sollten Sie wahrscheinlich auch die Aktualisierung in der Rasteransicht aufrufen, wodurch die Änderungen des Speicherereignisses neu gezeichnet werden. Sie können refreshNode ( siehe Grid-Ansicht-Dokumentation ) auch genau verwenden nehmen Sie im Geschäft auf, wenn Sie sich Sorgen um die Leistung machen.
Natürlich müssen Sie den Restful-Proxy nicht verwenden, Sie können jeden Proxy verwenden, solange der einzelne Datensatz geladen wird.
ExtJS 4.1
Ich hatte ein ähnliches Problem und versuchte es als Experiment
sStore.load({
id: mskey,
addRecords: true
});
wobei mskey eine UUID eines aktuell geladenen Datensatzes ist.
Ich löschte nicht zuerst den vorhandenen Datensatz (als Experiment) und aktualisierte den vorhandenen Datensatz mit der gleichen ID mit den neuen Daten vom Server (über das Modell - & gt; REST-Proxy). Perfekt!
Ich weiß, dass Sie gesagt haben, dass Sie keinen REST-Proxy verwenden, aber dies könnte anderen helfen, die diesen Beitrag gefunden haben, indem sie nach Suchbegriffen wie Ihrem Themennamen suchen (und so kam ich hierher!)
Es sieht also folgendermaßen aus: addRecords bedeutet hinzufügen oder aktualisieren.
Zu Ihrer Information Murray
Ich habe eine Überschreibung für das Ext.data.Model erstellt, um eine zusätzliche Methode hinzuzufügen, mit der die Daten eines vorhandenen Datensatzes (Modellinstanz) aktualisiert werden können.
%Vor%So können Sie es verwenden. Es ist eigentlich ziemlich einfach:
%Vor%Intern verwendet es die Methode load für das zugeordnete Modell, um einen neuen Datensatz zu erstellen. Dieser neue Datensatz basiert auf derselben ID wie der ursprüngliche Datensatz, für den die reloadData-Methode aufgerufen wurde. Beim Rückruf werden die Daten des neuen Datensatzes auf die Daten des ursprünglichen Datensatzes angewendet. Es wurden keine Ereignisse ausgelöst, die Sie wahrscheinlich möchten.
Dies ist Ext 4.2.1. Es gibt wahrscheinlich Dutzende von Szenarien, dass diese Lösung bricht, aber wir können immer verfeinern können wir nicht.
Update: Diese Lösung implementiert im Grunde die gleiche wie die von @Drasill. Naja ... Dieser wurde allerdings getestet.
Tags und Links javascript extjs extjs4 extjs-mvc