Richtiges Konfigurieren von Routern für die Eltern-Kind-Beziehung in Backbone Marionette
-
29-10-2019 - |
Frage
Es wird versucht, eine Seite zu erstellen, auf der Benutzer ein übergeordnetes untergeordnetes Element bearbeiten und anzeigen können.
Die Benutzeroberfläche besteht aus 3 Spalten Eltern: Liste der Eltern Kinder: Kind
Ich möchte die Controller so konfigurieren, dass Benutzer wieder genau dort sind, wo sie waren, aber keine Notwendigkeit dafür haben, damit sowohl Eltern als auch Kinder bearbeitet werden können.
// Mit der Backbone-Marionette näher kommen, aber immer noch einige kleine Probleme haben
MyRouter = Backbone.Marionette.AppRouter.extend({
appRoutes: {
'': 'AddClient',
'View/:clientid': 'ViewClient',
'Edit/:clientid': 'EditClient',
'View/:clientid/Add': 'PolicyAdd',
'View/:clientid/View/:policyid': 'PolicyView',
'View/:clientid/Edit/:policyid': 'PolicyEdit'
}
});
someController = {
AddClient: function () {
var someView = new ClientAdd();
MyApp.clientPane.show(someView);
},
ViewClient: function (clientid) {
var someView = new ClientView();
MyApp.clientPane.show(someView);
},
EditClient: function (clientid) {
var someView = new ClientEdit();
MyApp.clientPane.show(someView);
},
PolicyAdd: function (clientid) {
this.ViewClient(clientid);
var someView = new PolicyAdd();
MyApp.policyPane.show(someView);
},
PolicyView: function (clientid, policyid) {
this.ViewClient(clientid);
var someView = new PolicyView();
MyApp.policyPane.show(someView);
},
PolicyEdit: function (clientid, policyid) {
this.ViewClient(clientid);
var someView = new PolicyEdit();
MyApp.policyPane.show(someView);
}
};
Der "this.ViewClient" fühlt sich hackig an und funktioniert auch nicht.
Lösung
Mehrteilige Antwort hier ...
"this.ViewClient ist keine Funktion"
Dies ist ein Fehler in Marionette. Die Controller-Methode wird im Kontext des Routers anstelle des Controllers aufgerufen, sodass beim Aufruf von this.ViewClient
versucht wird, sie auf dem Router zu finden.
oops.
Fehler protokolliert. wird so schnell wie möglich beheben. https://github.com/derickbailey/backbone.marionette/issues/38
-
UPDATE : Dieser Fehler wurde jetzt in Version 0.5.1 von Backbone.Marionette behoben https://github.com/derickbailey/backbone.marionette
-
Um dieses Problem vorerst zu umgehen, können Sie Folgendes tun:
PolicyEdit: {
someController.ViewClient();
// ...
}
Wenn dies nicht funktioniert, müssen Sie möglicherweise die bind
- oder bindAll
-Methoden von Underscore.js verwenden, um die korrekte Bindung Ihrer Controller-Funktionen sicherzustellen.
Diese Problemumgehung wird nicht erforderlich sein, sobald ich den Fehler behoben habe ... hoffentlich später heute / heute Abend.