5

CodeIgniter を背面に、Backbone/RequireJS を前面に配置して Web アプリを構築しています。そのため、これは単一ページの Web アプリではなく、多くのコントローラー アクションに CI を使用し、さまざまなビューにさまざまなタイミングでバックボーンを使用します。次のような RequireJS/Backbone セットアップがあります。

<script type="text/javascript" data-main="main" src="require.js"></script>

main.js は次のようになります。

require.config({
  paths: {
           jquery: "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min",
           underscore: "libs/underscore",
           backbone: "libs/backbone",
           //Lots of other stuff
          },
  shim: {
           backbone: {
              deps: ["underscore", "jquery"],
          }
          // lots of other stuff
  }
  });

require(['views/app'], function(AppView){
    var app_view = new AppView;
});

Main.js は私のマスター テンプレート、つまりすべてのページに読み込まれ、サイト/アプリ全体で共通の一連のビュー (ヘッダー、ナビゲーションなど) が読み込まれます。

しかし、別のページでは、共通のビューに加えて別のビューもロードしたいと考えています。たとえば、「publish」というページ (それ自体がほぼアプリのようなもの) では、次のようにします。

<script type="text/javascript" src="publish.js"></script>

これは main.js の後にロードされ、次のようになります。

//publish.js
 require(['views/publishview], function(PublishView){
 var publishView = new PublishView;
 });

基本的に、それは半分の時間で機能し、残りの半分 (ハンマーでリフレッシュしたとき) はすべてで 404 が発生します。

それで、私の基本的なrequire configをすべてに使用するだけでなく、異なる部分を異なるタイミングで要求するきちんとした方法はありますか? 全体が SPA であれば簡単に実行できるように思えますが、私にとっては、アプリの大部分はまだ CodeIgniter を使用しています。

これをより良い言い回しで申し訳ありません。

4

1 に答える 1

1

それが正しい方法かどうかはわかりませんが、私ならどうしますか:

テンプレート (php)

<script type="text/javascript">
var myApp = {};
myApp.section = '<?= $section ?>'; //for exambple 'someSection'
</script>
<script type="text/javascript" data-main="main" src="require.js"></script>

次に、次のようなものを使用します。

(main.js)

var requires = {
someSection: {files: ['views/app'], handler: function(AppView){
    var app_view = new AppView;
}}
};

var myRequire = requires[myApp.section] || null;
if(myRequire) require(myRequire.files, myRequire.handler);

または... myApp.section の代わりに window.location.pathname 値を使用します

于 2012-11-30T15:12:19.343 に答える