【问题标题】:how can I get rid : TypeError: communityApp.activeTabLayout.pforum is undefined我怎样才能摆脱:TypeError:communityApp.activeTabLayout.pforum 未定义
【发布时间】:2014-02-20 05:33:32
【问题描述】:

我的模块代码是。

spine.module('communityApp', { startWithParent:假, 定义:函数(communityApp、App、Backbone、Marionette、$、_){ console.log("communityApp.js");

    // Setup the router for this module
    var Router = Marionette.AppRouter.extend({
        before: function () {
            console.log("communityApp.js: router.before()")
            App.startSubApp("communityApp", {});
        },
        appRoutes: {
            "community": "showCommunityTab",
            "community/pforum": "getPforum",
            "community/questions":"getQuestions",
            "community/events": "getEvents"
        }
    });

    // Startup router
    App.addInitializer(function () {
        console.log("communityApp.js: App.addInitializer()")
        // contains active controller
        communityApp.activeController = new communityApp.Controllers.tabController();
        // initializing route
        communityApp.Router = new Router({
            controller: communityApp.activeController
        });
    });

    // Let app know we started
    communityApp.addInitializer(function () {
        console.log("communityApp.js: DemoApp.addInitializer()");
        App.vent.trigger("app:started", "communityApp");
    });

    // This will run when a sub app (module) starts
    communityApp.on("start", function () {
        console.log("communityApp.js: on 'Start'()");
    });

控制器的代码是。

spine.module("communityApp", function (communityApp, App, Backbone, Marionette, $, _) { “使用严格”;

// initializing controllers and collections for message tabs
communityApp.Controllers = {};
communityApp.Collections = {};

communityApp.Controllers.tabController = Marionette.Controller.extend({
    showCommunityTab: function () {
        this.getCommunityTab();
    },
    getCommunityTab: function (data) {
        //var tabLayout = new communityApp.Views.tabLayout();
        //tabLayout.render();
        // creating active layout
        communityApp.activeTabLayout = new communityApp.Views.tabLayout();
        communityApp.activeTabLayout.render();
        // loading community module view
        App.regionMain.show(communityApp.activeTabLayout);
        // load pforum on community module load
        this.getPforum();
    },
    getPforum : function(){
        console.log('Public Forum Tab');
        var pforum = new communityApp.Controllers.pforumController();
        pforum.init();

    },
    getQuestions : function(){
        console.log('Question tab');
        var questions = new communityApp.Controllers.questionsController();
        questions.init();

    },
    getEvents : function(){
        console.log('Events tab');
        var events = new communityApp.Controllers.eventController();
        events.init();

    }
});

错误所在的代码,它是一个标签页。

spine.module("communityApp", function (communityApp, App, Backbone, Marionette, $, _) { “使用严格”;

communityApp.Controllers.pforumController = Marionette.Controller.extend({
    init: function(){
        var func = _.bind(this._getPforum, this);
        $.when(App.request('alerts1:entities' , {origin:'pforum'}))
            .then(func)
    },
    _getPforum:function(data){

        // populating the data
        communityApp.activeTabLayout.pforum.show(new communityApp.CollectionViews.pforumCollectionViews({
            collection: data
        }));
    }
});

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    这是因为您在getCommunityTab 中创建了activeTabLayout,并且您在getPforum 中创建了控制器后尝试访问它。它们都连接到不同的路线。因此,您不能保证 communityApp.activeTabLayout 存在于您的 init 方法中。

    community/pforum -> 创建你的控制器,而不是你的标签布局。

    community -> 创建你的标签布局,而不是你的控制器。

    您需要确保communityApp.activeTabLayout = new communityApp.Views.tabLayout();pforum.init(); 之前运行

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 2021-01-27
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2022-12-18
      • 1970-01-01
      相关资源
      最近更新 更多