2014-04-09 31 views
0

我有一個可以正常工作的骨幹應用程序,但有點沉重,因此我已經開始將它分成不同的文件,現在我有:如何從骨幹路由器訪問另一個文件中的骨幹視圖

backbone-view.js 
backbone-router.js 
... 

我用我的骨幹路由器實例化視圖時,像這樣的URL變化:

var Router = Backbone.Router.extend({ 
    routes: { 
     'our-approach.php': 'instantiateOurApproach', 
     'our-work.php': 'instantiateOurWork', 
     'who-we-are.php': 'instantiateWhoWeAre', 
     'social-stream.php': 'instantiateSocialStream', 
     'contact.php': 'instantiateContact' 
    }, 
    instantiateOurApproach: function() { 
     if(window.our_approach_view == null) { 
      window.our_approach_view = new OurApproachView(); 
     } 
    }, 

    instantiateOurWork: function() { 
     if(window.our_work_view == null) { 
      window.our_work_view = new OurWorkView(); 
     } 
    }, 

    instantiateWhoWeAre: function() { 
     if(window.who_we_are_view == null) { 
      window.who_we_are_view = new WhoWeAreView(); 
     } 
    }, 

    instantiateSocialStream: function() { 
     if(window.social_stream_view == null) { 
      window.social_stream_view = new SocialStreamView(); 
     } 
    }, 

    instantiateContact: function() { 
     if(window.contact_view == null) { 
      window.contact_view = new ContactView(); 
     } 

    } 
}); 

我現在遇到的問題是,他們是在一個單獨的文件中聲明,所以我不能訪問視圖以下全部未定義:

OurApproachView() 
OurWorkView() 
WhoWeAreView() 
SocialStreamView() 
ContactView() 

我曾嘗試做:

window.OurApproachView() 

但是,這是行不通的。

我不確定我的下一步行動是什麼,如果任何人都可以提供幫助,那就太棒了。

謝謝!

編輯

OK所以看起來這樣做的:

window.OurApproachView() 

不實際工作,有我的道歉,但沒有人有更好的建議?

回答

1

你可以採取這種做法:

// sample-view.js 

var app = app || {}; 

$(function() { 
    app.SampleView = Backbone.View.extend({ 
     el: '#sample-element', 

     template : // your template 

     events: { 
     // your events  
     }, 

     initialize: function() { 
      // do stuff on initialize 
     }, 

     render: function() { 
     // do stuff on render 
     } 
    }); 
}); 

同樣,所有的JS文件(機型,集合,路由器)可以設置這樣的。您可以通過以下途徑訪問路由器的任何視圖:

var view = new app.SampleView(); 
+0

我喜歡它,謝謝,我會試試這個。我是否認爲這是同一個窗口。但它只是一個自定義變量呢? – lukehillonline

0

這工作:

window.our_work_view = new window.OurApproachView(); 

但我不喜歡它作爲一個解決方案。

任何人都有更好的建議嗎?