3

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.
  });
});

私のコードには、もっと多くのビューがあります。ビューの長い必須リストを 1 つのオブジェクトに削減する方法はありますか? たぶん、別のアーキテクチャまたはrequire.jsのトリックによるものでしょうか?

「ルーター」とは何かという Symfony 2 の概念に影響を受けすぎているのかもしれません。

4

2 に答える 2

1

私自身、この問題について考えてきました。

簡単な解決策の 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());
  },

  ...
});

私は実際にこれを試したことはありませんが、うまくいくと思います。

于 2012-11-05T13:13:17.673 に答える
1

構文レベルでは、Require.js は「簡素化された CommonJS ラッピング」もサポートしています。明らかに、これは依存関係の長いリストを回避するのに役立ちませんが (@shioyama の提案がそうであるように)、名前付き関数の引数と一致しない依存関係名のリスクを最小限に抑え、物事を整頓するのに役立ちます(er)。

于 2012-11-09T02:07:04.747 に答える