Erzeugen auf den Fly -URLs für Backbone.js -Modelle
-
27-10-2019 - |
Frage
Ich habe ein paar Lösungen (eher nenne sie Hacks) dafür, suche aber nach eleganten Lösungen für das Problem. Hier ist das Problem, bitte gehen Sie es langsam durch
ich habe WebMethods
in dem index.aspx
Seite, auf die ajax (create
,update
,delete
) Anfragen werden gesendet. EIN Single WebMethod kann nicht alle diese Art von Vorgängen verarbeiten, daher für a Person
Modell Es gibt 3 Methoden nämlich nämlich
CreatePerson (attributes)
UpdatePerson (attributes)
DeletePerson(personId)
Daher verwende ich einen hackigen Prozess wie unten, die JavaScript -Funktionsnamen entsprechen den jeweiligen Methoden auf dem Server
CreatePerson:function(){
model.url = "/CreatePerson";
},
UpdatePerson:function(){
model.url = "/UpdatePerson";
},
DeletePerson:function(){
model.url = "/DeletePerson";
}
Die oben genannten Methoden werden in den Ansichten deklariert, die das Personmodell machen. Urlroot für das Modell ist index.aspx
Daher werden die AJAX -Anrufe aufgeleitet CreatePerson -Methode in index.aspx Wenn der Betrieb erstellt wird dh index.aspx/createPerson
Wenn ich die Funktion delegiere, wird sie für alle Modelle in der JS -Anwendung überschreiben, was ich nicht aufnehmen möchte.
Frage
Gibt es irgendwie, dass ich die URL gemäß dem Modelsendpunkt vorbereiten kann, bevor die AJAX -Anforderung gestellt wird, wenn Backbone.js mit ASP.NET -Seiten verwendet wird?
Lösung
Sie sollten die überschreiben sync
Methode Ihrer Sammlung, wenn Sie eins oder das Modell haben, wenn Sie an einem einzelnen Modell arbeiten. Und dann, je nachdem, ob es erstellt, aktualisiert oder zerstören, ändern Sie die URL entsprechend und rufen Sie die Backbone -Synchronisation an, die alle Parameter weiter übergeben, während die richtige URL festgelegt ist.
var Model = Backbone.Model.extend({
...
sync: function(method, model, options) {
// here method param can be either "read", "create", "update", "destroy"
// set your url based on its value
Backbone.sync.call(this, method, this, options);
// if your super class had custom sync as well you'd have to call
// Model.__super__.sync.call(...)
}
});
Ich bin kein ASP -Programmierer, aber ist es nicht möglich, eine Ruheschnittstelle mit .NET zu haben? macht die Dinge viel einfacher :)