3

バックボーンjsでこのようなことを達成しようとしています

var AppRouter = Backbone.Router.extend({
    routes: {
        // MVC like route
        ':controller': 'defaultRoute',
        // MVC like route
        ':controller/:action': 'defaultRoute',
        // MVC like route
        ':controller/:action/:id': 'defaultRoute',
        // MVC like route
        ':controller/:action/*id': 'defaultRoute'
    },
    defaultRoute: function (controller, action, id) {
        // render view here or 
        // call another specific route regarding to controller parameter
    }
});

var appRouter = new AppRouter;
Backbone.history.start();

したがって、url が次の場合: something.com/#home/index defaultRoute 関数は、パラメーターcontroller="home"およびaction="index"を取得します。フォルダー「コントローラー/ホーム/インデックス」でビュー(Backbone.View)を見つけて動的にインスタンス化する(およびレンダリングする)方法を今疑問に思っています。また、「コントローラー」ごとに Backbone.Router を使用する方がよいのではないかと考えています (「コントローラー」という名前を使用していますが、実際には「ルーター」です)。

何か案は?

可能な解決策で更新してください!

私はこれで終わった

    // Filename: router.js
define([
  'jquery',
  'underscore',
  'backbone'
], function ($, _, Backbone) {
    var AppRouter = Backbone.Router.extend({
        routes: {
            // MVC like route
            ':controller': 'defaultRoute',
            // MVC like route
            ':controller/:action': 'defaultRoute',
            // MVC like route
            ':controller/:action/:id': 'defaultRoute',
            // MVC like route
            ':controller/:action/*id': 'defaultRoute'
        },
        defaultRoute: function (controllerName, actionName, id) {
            controllerName = controllerName || Config.Defaults.Controller;
            actionName = actionName || Config.Defaults.Action;
            require(["controllers/" + controllerName], function (ctl) {
                var code = "ctl." + actionName + "();";
                eval(code);
            });
        }
    });

     var appRouter = new AppRouter;
        Backbone.history.start();
});

そしてサンプルコントローラーはこれ

define([
  'jquery',
  'underscore',
  'backbone'
], function ($, _, Backbone) {
    return {
        index: function () {
            console.log("Action: Index");
        },
        about: function () {
            console.log("Action: About");
        }
    };
});

このサンプルで動作します。現在、params バインディングなどを解決しようとしています。さらにテストが必要です。

4

2 に答える 2

1

現時点ではまだ調査中ですが、現在使用しているコードは次のとおりです。

    // Filename: router.js
define([
  'jquery',
  'underscore',
  'backbone'
], function ($, _, Backbone) {
    var AppRouter = Backbone.Router.extend({
        routes: {
            // MVC like route
            ':controller': 'defaultRoute',
            // MVC like route
            ':controller/:action': 'defaultRoute',
            // MVC like route
            ':controller/:action/:id': 'defaultRoute',
            // MVC like route
            ':controller/:action/*id': 'defaultRoute'
        },
        defaultRoute: function (controllerName, actionName, id) {
            controllerName = controllerName || Config.Defaults.Controller;
            actionName = actionName || Config.Defaults.Action;
            require(["controllers/" + controllerName], function (ctl) {
                var code = "ctl." + actionName + "();";
                eval(code);
            });
        }
    });

     var appRouter = new AppRouter;
        Backbone.history.start();
});

つまり、「コントローラー」は次のようになります。

    // Filename: controllers/home.js
define([
      'jquery',
      'underscore',
      'backbone',
    ], function ($, _, Backbone) {
        return {
            index: function () {
                require(['views/home/index'], function (view) {
                    view.render();
                });
            },
            about: function () {
                require(['views/home/about'], function (view) {
                    view.render();
                });
            }
        };
    });

次は、典型的なバックボーンビューを作成することです。

合格パラメータをテストし、より複雑なテストを行うときに、さらに投稿します。

于 2012-08-13T07:50:08.680 に答える
0

JSクライアント側の動的な依存関係の読み込み、これはまだ夢の中にあると思います。

Dynamic Sc​​ript Loadingのような非常にトリッキーなテクニックで遊ぶこともできますが、最初は簡単に見えても (遅かれ早かれ) 悪夢に陥ります。

このような技術が必要な場合は、その価値があることを確認してください。もう一度考えてみてください。

アプリケーション全体に1つのルーターを使用するか、コントローラー/モジュールまたは私がすでに意見を述べたものによって複数のルーターに分割するかについて

于 2012-08-09T10:58:59.603 に答える