2012-08-08 40 views
1

我想更改我的骨幹網應用程序的當前頁面。我有路線設置,當我更改網址時,我的頁面正在改變,我希望每次訪問給定路線時都會將新視圖呈現給dom。骨幹:確定是否已加載視圖

我的路由器:

myApp.Application = Backbone.Router.extend({ 

    routes: { 
    ''  : 'home' 
    //etc 
    }, 

    initialize : function() { 
    myApp.dom.$container = $('#container'); 
    myApp.dom.$container.empty(); 
    }, 

    home : function() { 
    myApp.loginView = new myApp.views.home(); 
    myApp.dom.$container.append(myApp.home.render().el); 
    } 

    }) 

難道我就在想,我需要檢查,看是否(例如)myApp.loginView存在之前我渲染呢?

因此,像:

home : function() { 
    if (!myApp.loginView) {} 
     myApp.loginView = new myApp.views.home(); 
     myApp.dom.$container.append(myApp.home.render().el); 
    } else { 
     //just show it 
    } 
    } 

..和我的每個路線的做到這一點?

謝謝!

+2

我的確如你所說,檢查已經呈現的視圖 – 2012-08-08 23:53:52

+0

是的,正如@ClaudiuHojda所說,我也是:) ..檢查出這個問題http://stackoverflow.com/questions/11796289/prevent-tab-內容從加載多次骨幹-JS我認爲是重複 – fguillen 2012-08-09 00:00:05

+0

酷 - 這只是一個理智/最佳實踐檢查。謝謝。 – mindwire22 2012-08-09 00:57:26

回答

2

這似乎是溼的,我寧願做一些事情,如呼叫isAlreadyRendered()

此外,堅持一切myApp.SpecificName,當你myApp.views似乎是類似乎是錯誤的。

關於與App.views.class = new App.Views.Class

初始化然後創建開始視圖的工廠,像

function factory(className){ 
    if(App.views[className.toCamelCase()]) return; 
    App.views[className.toCamelCase()] = new App.Views[className].apply(App.Views, [].slice.call(arguments, 1)) 

} 

像日在,我已經習慣了使用的CoffeeScript這將使事情變得更容易,以及什麼。

適用和切片,以及所有這一切,以便您應該能夠通過儘可能多的參數,因爲你想要的因素後,第一個,雖然這一切都從我的頭,所以它可能是一個學習實驗得到它工作和理解使用應用程序和調用(如果你使用咖啡腳本你會更快樂)的樂趣

享受!