在我的應用程序中,我有一些頁面具有類似的設計和主頁,設計完全不同。所以,我的問題是如何理解所需的佈局(對於具有類似設計的頁面)已經被創建,而不是重新渲染它。順便說一句,在進一步的發展中,我可能會添加一些新的頁面,將有不同的設計。我想過一些解決方案,但它們都對我來說似乎是反模式。所以,我需要以正確的方式組織我的Marionette.Controller。現在看起來像這樣:如何理解所需佈局已經創建?
define(['backbone', 'marionette', 'app/app', 'session'], function (Backbone, Marionette, app, session) {
'use strict';
var main = app.mainRegion;
function mainContent (view, model, options) {
require([view, model], function (View, Model) {
if (...) { //if main.currentView is already 'layout/main' then...
var model = new Model(options);
main.currentView.content.show(new View({ model: model }));
} else {
require(['layout/main'], function(Layout) {
main.show(new Layout());
var model = new Model(options);
main.currentView.content.show(new View({ model: model }));
})
}
});
}
return Marionette.Controller.extend({
home: function() {
if (session.getToken() === '') {
require(['layout/home', 'login/view', 'register/view', 'login/model',
'register/model'], function(Layout, LoginView, RegisterView, LoginModel, RegisterModel) {
main.show(new Layout());
main.currentView.login.show(new LoginView({ model: new LoginModel() }));
main.currentView.register.show(new RegisterView({ model: new RegisterModel() }));
});
} else {
Backbone.history.navigate('/feed', { trigger: true });
}
},
feed: function() {
mainContent('feed/view', 'feed/model', {});
},
profile: function(username) {
mainContent('profile/view', 'profile/model', { username: username });
}
});
});
您認爲什麼解決方案? – 2014-11-23 06:55:28
@coding_idiot 1)Marionette文檔說:「如果你用相同的視圖重新調用show,默認情況下什麼都不會發生,因爲視圖已經在該區域了。var myView = new MyView(); MyApp.mainRegion.show(myView) ;/*第二個顯示調用將重新顯示視圖*/MyApp.mainRegion.show(myView);「。因爲我認爲如果我將佈局的新實例傳遞給show(),我認爲該區域將重新呈現它當前的視圖,我認爲要在全局中創建「main/layout」。 2)使用main.currentView.content.hasView(),因爲'layout/home'沒有'content'區域。 – alexb 2014-11-23 13:33:46