如何缩短骨干路由器的长需求列表

时间:2012-11-05 12:49:35

标签: javascript backbone.js requirejs

我已经使用Backbone.js和Require.js启动了一个JavaScript应用程序。应用程序显示不同的顶级视图 - 搜索项目,编辑项目的不同方面,将项目相互连接。每个视图都是专门显示的。

路由器模块的文件如下所示:

define([
  'backbone',
  'myapp' 
  'views/search',
  'views/edit1', 
  'views/edit2', 
  'views/connect'], 
function(Backbone, App, SearchView, EditView1, Editview2, ConnectView) {

  return Backbone.Router.extend({
    routes: {
      "search": "doSearch",
      "edit1":  "doEdit1",
      // more routes here
    },
    doSearch: function() {
      App.main.show(new SearchView()); // Marionette.js regions
    },
    doEditView1: function() {
      App.main.show(new EditView1());
    },
    // etc.
  });
});

在我的代码中有更多的视图。有没有办法减少一个对象的长需求视图列表?也许通过另一个架构或一些require.js技巧?

也许我太过受到Symfony 2概念的影响了“路由器”是什么?

2 个答案:

答案 0 :(得分:1)

我自己一直在考虑这个问题。

一个简单的解决方案是定义一个包含所有视图的模块,然后只包含 作为依赖项:

视图/ all.js

define([
  'views/search',
  'views/edit1', 
  'views/edit2', 
  'views/connect'], 
function(SearchView, EditView1, EditView2, ConnectView) {

    return {
      "EditView1": EditView1,
      "EditView2": EditView2,
      "ConnectView": ConnectView
      "SearchView": SearchView
    };
});

然后在您的路由器模块中,您可以将views / all包含为分配给变量Views的依赖项,并将任何视图调用为Views.EditView1Views.EditView2等等:

define([
  'backbone',
  'myapp', 
  'views/all'], 
function(Backbone, App, Views) {
  ...

  doSearch: function() {
    App.main.show(new Views.SearchView());
  },

  ...
});

我从来没有尝试过这个,但我认为它会起作用。

答案 1 :(得分:1)

在语法层面,Require.js也支持“simplified CommonJS wrapping”。显然这不能帮助你避免长依赖列表(正如@ shioyama的建议所做的那样),但会最大限度地降低使用命名函数参数的不匹配依赖名称的风险,并有助于保持整洁(呃)。