Require&中的变量函数名称。骨干

时间:2013-04-08 14:30:49

标签: javascript backbone.js requirejs

我正在使用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,使用action param = list,然后调用Require.js函数中的list模块。我目前正在使用eval(),但我想知道是否有更好的方法?

基本上,在Javascript中,您是否可以使用另一个变量名引用变量而不使用eval()

我想是一个较短的版本,你怎么做:

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

没有eval()

2 个答案:

答案 0 :(得分:3)

您无法访问具有字符串名称的变量。但是你可以创建一个映射:

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

然后您可以通过键访问该功能:

projectsAction : function(action) {
    this.subView = new actions[action]().render();
}

答案 1 :(得分:1)

imo的最佳方式是使用requirejs的require函数:

projectsAction : function(action) {
    /* .... lots of code cut out here .... */
    /* Create and render the action specified */
    var self = this;
    require('views/project/' + action, function(view) {
      (self.subView = new view).render();
    }
  }

因为它也会削弱样板,使其免于大量行动。