0

私のアプリでは、すべてのユーザーが同じモジュールを利用できるわけではありません。だから、ロードしたjsonに基づいて、ルートをロードしたいと思います。これは機能しますが、バックボーンでルートを初期化できません。ファイルをロードするには、Require.js を使用します。

すべてを機能させるには、次のコードを使用します。

    var initialize = function () {

    //TODO Authentication check
    $.ajax({
        url: '/auth/test@test.com/test'
    });

    moduleNames = new Array();
    appNames = new Array();
    menu = new menuCollection;
    menu.fetch( {
        success: function(collection) {
            collection.each(function(menuitem) {
                moduleNames.push('apps/' + menuitem.attributes.href + '/router');
                appNames.push(menuitem.attributes.href);
            });

//Here something goes wrong
            require(moduleNames, function(appNames) { 
//////////////////
                $.each(appNames, function(i, routerName) {
                    console.log(routerName);
                    objectName = 'router' + routerName.capitalize();
                    console.log(objectName);
                    varname = routerName + '_router';
                    console.log(varname);
                    var varname = this[objectName];
                    console.log(varname);
                });
                var home_router = new routerHome;
                Backbone.history.start();
            });
        }
    });
};

一般的なルーター ファイルは次のようになります。

// Filename: router.js
define([
'jquery',
'underscore',
'backbone',
'apps/profile/views/info',
'apps/profile/views/contact',
], function ($, _, Backbone, viewInfo, viewContact) {
var routerSilentbob = Backbone.Router.extend({
    routes:{
        // Define some URL routes
        'silentbob':            'showInfo',
        'silentbob/info':       'showInfo',
        'silentbob/contact':    'showContact'
    },
    showInfo:function () {
        alert('testt');
    },
    showContact:function () {
        viewContact.render();
    }
});

return routerSilentbob;
});

これはメニューオブジェクトです:

[{"uuid":"041e42ee-9649-44d9-8282-5113e64798cf","href":"silentbob","title":"Silent Bob"},{"uuid":"111127aa-fdfc-45e5-978f-46f1d0ea0d89","href":"menu","title":"Menu"},{"uuid":"985574e5-f7ae-4c3f-a304-414b2dc769bb","href":"youtubeengine","title":"Youtube Engine"},{"uuid":"cc84424d-9888-44ef-9895-9c5cce5a999b","href":"cardgamesdk","title":"Cardgame SDK"},{"uuid":"73f4d188-4ec5-4866-84ec-ea0fa5901786","href":"flash2flashvideo","title":"Flash2Flash videotelefonie"},{"uuid":"0702f268-116d-4d62-98e2-8ca74d7ce5f3","href":"appstore","title":"Menu"},{"uuid":"2f8606e3-b81d-43bc-a764-a0811e402c6d","href":"me","title":"Mijn profiel"},{"uuid":"bb1acae2-a6c7-404c-861c-b8a838a19614","href":"contacts","title":"Contacten"},{"uuid":"9b6e6022-fe01-40ab-b8fb-df70d31c3b28","href":"messaging","title":"Berichten"},{"uuid":"29489359-3685-4b77-9faa-6c9f63e5fe09","href":"calendar","title":"Kalender"},{"uuid":"1c9541ff-2a25-40ca-b382-3c953d440f35","href":"cubigotv","title":"Cubigo TV"},{"uuid":"5b7af683-941b-45d7-bfae-9a9e12bb09c0","href":"links","title":"Websites"},{"uuid":"27efca4c-2b64-455d-8622-367f0f13d516","href":"ideabox","title":"Idee\u00ebn"},{"uuid":"84d2c2ea-7ce7-413e-963f-7b729590b5d9","href":"companyguide","title":"Bedrijven"},{"uuid":"2a61899f-d9de-478e-a03c-64a5fd6214d7","href":"associations","title":"Verenigingen"},{"uuid":"0cf05900-cee7-4f2e-87ae-7967315c2b93","href":"myneighbourhood","title":"Mijn buurt"},{"uuid":"01ae757b-d6a3-4ab0-98cb-a741572122bf","href":"htmlwebsite","title":"HtmlWebsite"}]

そのため、ルーターのオブジェクトを取得してバックボーンにロードする正しい方法を見つけることができません。関数のパラメーターとして変数を必要としない方法はありますか? または、別の方法でロードできますか?

4

2 に答える 2

1

「ルーター」モジュールに、渡されたオブジェクト リテラルを返すようにします。Backbone.Router.Extend()

define([], function () {
    return {
        // Router Definition here
    }
})

次に、次のようにルーター モジュールを作成します。

define(arrayOfModulePaths, function () { 

    return {
        listen: function(module) {
            var Router = Backbone.Router.Extend(arguments[module]);
            var router = new Router();
            Backbone.history.start();
        }
    }
})

次に、単にルーターモジュールを要求し、モジュールインデックスを渡すことができますrouter.listen()

于 2012-05-29T14:21:06.220 に答える
0
 require(moduleNames, function() { 
    var routerObjs = {};

                    $.each(arguments, function(i, CustomRoute) {
                        var routerName = appNames[i];
                        routerObjs['router' + routerName.capitalize()] = CustomRoute;
                    });
                    var home_router = new routerObjs.routerHome;
                    Backbone.history.start();
                });
于 2012-06-05T09:40:48.237 に答える