簡體   English   中英

如何從骨干路由器訪問另一個文件中的骨干視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM