如何从骨干路由器访问另一个文件中的骨干视图

时间:2014-04-09 15:41:33

标签: javascript backbone.js backbone-views backbone-routing

我有一个骨干应用程序工作正常,但在一个文件中有点沉重,所以我开始将它分成我现在拥有的不同文件:

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()

确实有效,我在那里道歉,但有没有人有更好的建议?

2 个答案:

答案 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();

但我不喜欢它作为解决方案。

有人建议更好吗?