Ich möchte den aktuellen Navigationsstatus hervorheben. Wenn die Hash-Änderung #home
ist, möchte ich die Menünavigation 'Home' anders und ähnlich wie andere Links gestalten.
Backbone.js löst einzelne Ereignisse wie route:home
, ... route:some-other
aus, wenn auf die #home
und andere Links geklickt wird. Ich konnte kein gemeinsames Ereignis sehen, das für jeden Hashwechsel ausgelöst wird. Damit muss ich die State-Highlight-Logik schreiben, indem ich an alle Routenereignisse binde, was meiner Meinung nach keine gute Lösung ist.
Also, ich habe Backbone.Router.route
in meiner Router-Unterklasse / Objekt überschrieben, wie
Dies wird ein gemeinsames route_change
-Ereignis für jede Hash-Änderung veröffentlichen und die name
, fragment
und andere args
übergeben, wobei ich den Status an einem einzigen Ort hervorhebe.
Meine Frage ist, muss ich die Backbone-Methode wie diese überschreiben oder gibt es einen eingebauten Mechanismus, den ich hier verwenden kann. Wenn nicht, würde ich gerne ähnliches Verhalten in Backbone.js sehen
Bearbeiten: Beispielprogramm
%Vor%und Navigation mit dem obigen Router:
%Vor% Ausgabe: home route
Aktualisieren Sie , warum das obige Programm nicht funktioniert:
sollten wir für all
event auf Router instance
binden, aber nicht auf Router
selbst - wenn also Router.bind('all', ...
in router.bind('all', ...)
geändert wird, funktioniert das obige Programm
In Backbone 0.5.x können Sie all
event an die Router-Instanz binden und der erste Argument-Durchlauf an Ihren Handler wird route
Hier ist Beispiel auf jsfiddle , hier wiedergegeben:
%Vor%Ich hatte das Problem, dass beim ersten Laden einer Seite das Menü nicht hervorgehoben wurde, da das Ereignis vor dem Beginn der Bindung kam. Ich habe das behoben, indem ich den Verlauf benutzt habe:
%Vor%Tags und Links highlighting backbone.js navigation