我有一个骨干应用程序工作正常,但在一个文件中有点沉重,所以我开始将它分成我现在拥有的不同文件:
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()
确实有效,我在那里道歉,但有没有人有更好的建议?
答案 0 :(得分: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();
答案 1 :(得分:0)
这有效:
window.our_work_view = new window.OurApproachView();
但我不喜欢它作为解决方案。
有人建议更好吗?