Mit dem folgenden Code in einem Backbone-Router kann sichergestellt werden, dass beim direkten Navigieren eines Benutzers zu #test/map
oder #test/images
zuerst die an die Route angehängte Funktion #test
ausgeführt wird?Backbone - Routefunktion vor Unterroutenfunktion ausführen
Die Funktion invokeTest
erstellt eine übergeordnete Ansicht mit dem Container, in dem die Unteransichten "map" und "images" gerendert werden. also muss ich sicherstellen, dass die Basislayout-Ansicht gerendert wurde, bevor Sie springen, um die Subviews zu rendern.
var Workspace = Backbone.Router.extend({
routes: {
"test": "invokeTest", // #test
"test/map": "invokeTestMap", // #test/map
"test/images": "invokeTestImages" // #test/images
},
invokeTest: function() {
//render base-layout
console.log("test function executed");
},
invokeTestMap: function() {
//render map view using element created with the base layout template
console.log("Map function executed");
},
invokeTestImages : function(){
//render images view using element created with the base layout template
console.log("images function executed");
}
});
jetzt nur ich das Konsolenprotokoll für die Subviews bekommen, wird die Wurzelfunktion nie aufgerufen.
Ich verwendete die 'initialize' Methode, um das Basis-Layout zu rendern und es funktionierte gut, aber Jetzt habe ich eine Login-Ansicht, so kann ich diesen Ansatz nicht mehr verwenden .. Ihr zweiter Vorschlag scheint wie der Weg zu gehen, mit dem Router einen Verweis auf die Basis-Layout-Ansicht, und nur erstellen, wenn es nicht bereits existiert macht das Sinn? – randomguy04
@ randomguy04 Ja, das ist in der Regel, wie ich jede Ansicht in Router –
initialisiert habe So habe ich es so gemacht, funktioniert gut, aber ich bin ein bisschen besorgt über Wartung, da ich anrufen muss Diese neue Methode, die prüft, ob das Basislayout in jeder davon abhängigen Ansicht existiert, kann ich nur als Referenz für die Methode 'execute' verwenden, die vorher ausgeführt wurde Routennavigation), da nicht alle Ansichten in meiner App dieses Basislayout benötigen und es gibt eine Login-Ansicht, mit der besagt, dass Sie meine Frage genau beantwortet haben, danke! – randomguy04