2012-04-10 4 views
2

Ich habe mein Modell mit einem REST-Proxy definiert. Es funktioniert gut für lesen (GET) und aktualisieren (PUT), da diese Operationen eine primäre ID erfordern. Wenn ich eine create-Operation (POST) durchführe, sendet der Proxy alle Felder, einschließlich der leeren primären ID, an den Server, was zu Fehlern auf dem Server führt. Der Server erwartet, dass keine primäre ID für eine Erstellungsoperation enthalten sein soll. Wie weise ich extjs an, den leeren primären ID-Wert nicht zu senden? dh. "{'model_id': '', ...}"?Wie verhindere ich, dass ein extjs Modell/Proxy die leere primäre ID beim Erstellen speichert

Ext.define('model', { 
    extend : 'Ext.data.Model', 
    idProperty : 'model_id', 
    fields : ['model_id', 'first', 'last'], 
    proxy : { 
     type : 'rest' 
    } 
}); 

var mymodel = Ext.create('model',{last:'digler'}); 
mymodel.save() //posts "{ 'model_id':'', 'last':'digler'}"? 

Ich möchte, dass es das primäre ID-Feld überhaupt nicht auf einem erstellen enthält.

Antwort

1

Ich denke, dass dies eine falsche Möglichkeit ist, die Struktur der Anfrage zu ändern. Im Fall der Verwendung REST, die Verantwortung zu betreiben erstellen, Update-Anforderungen sind vollständig auf der Serverseite.

Im Fall, dass Sie immer noch wollen, Parameter ändern, wenn Anfrage erstellen gestartet wird, können Sie es tun, indem „beforerequest“ event:

Ext.Ajax.on("beforerequest", function(conn, options, eOpts){ 
    if (options.action=='create') 
    { 
    var newData = 
      {'name': options.jsonData.name, 'email': options.jsonData.email }; 
    options.jsonData = newData; 
    } 
}); 

Nur zum Beispiel, das ich neu definiert Datenfelder hart codiert, aber, Natürlich ist es möglich, alle Felder in einer Schleife zu durchlaufen, ohne ihre Namen im Code zu schreiben.

+0

i mit dieser Methode werde und einfach Löschen der ID-Eigenschaft von jsonData: lösche options.jsonData ['post_id']. Fortwährend falsch zu machen ist unbequem, weil ich die ID für Updates brauche – Paul

1

Nun, Sie haben einen ziemlich mürrischen Server, oder?

Sie können es auf null gesetzt, aber

fields:[ 
{ 
name:'model_id', 
type:'int' 
useNull:true 
} 
] 

mit, obwohl, wenn MODEL_ID ein String ist, wird es noch ''

Ihnen persist = false auf dem Feld setzen, aber dann wird es nicht speichern sie sie auf Update

im Grunde, informieren sie Ihren Server-Administrator die ID zu ignorieren, wenn es leer ist

Verwandte Themen