我是BackboneJS,RequireJS,JQuery應用程序開發新手。我想使用router.navigate()
更改當前視圖。這是路由器的配置:爲什麼Backbone.js中的router.navigate()不會加載所需的視圖?
define([
//Libraries to load
"jquery",
"underscore",
"backbone",
"mustache",
//Views to load
"../views/Main",
"../views/Login",
"../views/Dashboard",
"../views/Empty"
], function ($, _, Backbone, Mustache, MainView, LoginView, DashboardView, HomeView) {
//All of the dependencies in the array above become parameters of the function to be managed
'use strict';
var AppRouter = Backbone.Router.extend({
routes: {
// Default
'*actions': 'defaultAction'
},
loadView: function(view){
this.view && (this.view.close ? this.view.close() : this.view.remove());
this.view = view;
this.view.render();
}
});
var initialize = function(){
var app_router = new AppRouter;
app_router.on('route:defaultAction', function (actions) {
switch (actions){
case "login": this.loadView(new LoginView()); break;
case "home": this.loadView(new HomeView()); break;
}
});
// Extend the View class to include a navigation method goTo (source: http://stackoverflow.com/questions/7755344/using-the-backbone-js-router-to-navigate-through-views-modularized-with-require)
Backbone.View.prototype.goTo = function (loc) {
app_router.navigate(loc, true);
};
Backbone.Model.prototype.goTo = function (loc) {
app_router.navigate(loc, true);
};
Backbone.history.start();
};
return {
initialize: initialize
};
});
在Backbonejs查看我使用下面的代碼更改/負載的觀點:
self.goTo("home");
但只有更改URL的#標籤。例如:#login
更改爲#home
,但未加載視圖。我必須重新加載頁面,網址爲#home
才能加載主頁視圖。
注意:Backbone.history.navigate("viewname", { trigger: true });
會產生相同的結果。更改網址但不路由到查看。
我的路由器代碼適用於:
routes: {
'login': 'renderLogin',
'home': 'renderHome',
// Default
'*actions': 'renderDefault'
},
renderDefault: function(){
this.view = new MainView();
this.view.render();
},
renderLogin: function(){
this.view = new LoginView();
this.view.render();
},
renderHome: function(){
this.view = new HomeView();
this.view.render();
}
}
謝謝@rcarvalho。我修改了我的路由器並應用了建議的更改。現在我的應用重定向了所有請求的URL,不需要手動刷新視圖。 – pedrozopayares