1

私は Require.js と Backbone を使用しており、次のような Backbone ルーター モジュールを使用しています。

define([
  "views/global",
  "views/project/edit",
  "views/project/list",
], function(GlobalView, edit, list){
    return Backbone.Router.extend({

      routes: {
        "projects/:action/" : "projectsAction",
      },

      projectsAction : function(action) {
        /* .... lots of code cut out here .... */
        /* Create and render the action specified */
        this.subView = new eval(action+"()").render();

      }
  });
});

これは一例です。projectAction から多くのセットアップ コードを削除しました。
URL:/projects/listで projectAction を実行し、actionparam =listを指定してlistから、Require.js 関数からモジュールを呼び出します。でやっているeval()のですが、何か良い方法はないでしょうか?

基本的に、Javascript では、変数を別の変数名で参照できますeval()か?

短いバージョンは次のようになると思います。

var name = "Math.random";
name();  // = 0.34343....

なしでeval()

4

2 に答える 2

3

名前が文字列の変数にはアクセスできません。ただし、マッピングを作成できます。

var actions = {
    edit: edit,
    list: list
};

次に、キーで関数にアクセスできます。

projectsAction : function(action) {
    this.subView = new actions[action]().render();
}
于 2013-04-08T14:35:36.743 に答える