[英]How to access a backbone view in another file from backbone router
我有一個主干應用程序,可以正常工作,但是要放在一個文件中變得有點沉重,因此我開始將其分成幾個不同的文件:
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()
但這是行不通的。
我不確定下一步將采取什么行動,如果有人可以幫助,那將是非常棒的事情。
謝謝!
編輯
好的,看起來好像在做:
window.OurApproachView()
確實有效,我在此道歉,但是有人能提出更好的建議嗎?
您可以采用這種方法:
// 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();
這有效:
window.our_work_view = new window.OurApproachView();
但是我不喜歡它作為解決方案。
有人建議更好嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.