Używam BackboneJS z RequireJS dla aplikacji, którą buduję.Zmienna globalna w routerze BackboneJS przy użyciu RequireJS
Plik App
inicjuje Router:
// Define application router
var router = new AppRouter();
Backbone.history.start();
A potem router przejmuje kontrolę nad działaniami systemowymi.
var App = Backbone.Router.extend({
routes: {
"project/:id": "getProject",
"projects": "getProjects",
"*actions": "defaultRoute"
},
getProject: function (id) {
// dashboard.set('some_key', 'some_value');
},
getProjects: function() {
// dashboard.set('some_key', 'some_value');
},
defaultRoute: function() {
// dashboard.set('some_key', 'some_value');
}
});
Dodałem Dashboard
modelu i widoku, które mogę używać do wyświetlania globalnych informacji o stanie mojego systemu w danym momencie. (To będzie siedzieć u góry okna). Jego widok monitoruje model zmiany wartości i ponownego renderowania w razie potrzeby. To działa dobrze.
chcę uniknąć konieczności ponownego napisania tego kiedykolwiek po moim początkowym wystąpienia obiektu:
var dashboard = new DashboardModel();
var dashboardView = new DashboardView({ model: dashboard });
$('#dashboard-placeholder').html(dashboardView.render().el);
Co potrzebne jest jednak to, aby być w stanie uzyskać dostęp do tego obiektu w dowolnym miejscu (wystąpienie mojego Dashboard
Model). W tej chwili uruchamiam go w App
, ale nie mogę uzyskać do niego dostępu w routerze, jeśli to zrobię. Naprawdę nie chcę tego definiować w routerze, ponieważ nie jest to właściwe zadanie dla routera.
Jak i gdzie mogę zdefiniować to wystąpienie mojego modelu Dashboard
?
Brilliant odpowiedź, dziękuję bardzo. Miałem na myśli podejście singleton, ale wciąż nie byłem pewien, jak zrobić statyczną metodę! Świetnie się spisałam, dziękuję. – Alex