0

Rails Asset Pipeline を使用して、大きな JavaScript ファイルを多くの異なるパーシャルに分割する方法を考えていました。

例えば:

YUI().use('app', function(Y) {
    //*=require sub/file_a.js
    //*=require sub/file_b.js
    //*=require sub/file_c.js
    //*=require sub/file_d.js
});
// this obviously is not the answer & does not work.

これは、YUI ビューとモデルでいっぱいの巨大なアプリではなく、見た目がきれいな JS ファイルを持つという開発者の利益のためだけです。

私はすでにERBを使ってファイルをインクルードしようとしましたが、うまくいきませんでした。Render はアセット パイプラインで使用できないため、これも失敗です。

何か案は?

最終結果は依然として rake compile:assets:all によってコンパイルされるため、これは開発環境でのみ使用されます。

4

2 に答える 2

1

charlyto の考えは正しかった。

答えは、ビュー/モデルとしてスプロケットと YUI モジュールを使用することでした。

//*=require_self
//*=require view/file_a.js
//*=require model/file_a.js
//*=require view/file_b.js
//*=require model/file_b.js
YUI().use('app','app-view-file-a','app-view-file-b','app-model-file-a','app-model-file-b', function(Y) {
    Y.FileApp = Y.Base.create('fileApp', Y.App, [], {
        views: {
            fileA: {type: 'FileAView'},
            fileB: {type: 'FileBView'}
        }
    }, {
        ATTRS: {
            root: {value: '/'}
        }
    });

    var app = new Y.FileApp({
        contentSelector: '#pjax-content',
        serverRouting: true,
        transitions: true,
        container: '#file-app',
        viewContainer: '#file-app-views'
    }).render().showContent('#pjax-content', {view: 'FileAView'});
});

ビューとモデル ファイルでは、通常の YUI3 モジュールの場合と同じように作成します。

YUI.add('app-view-file-a', function(Y) {
  Y.namespace('FileAView');
  FileAView = Y.Base.create('fileAView', Y.View, [], {
      template: Y.Handlebars.compile(Y.one('#file-a-template').getHTML())
  });
  Y.FileAView = FileAView;
},'0.1.0',{requires:['node','handlebars'], skinnable:false});

最初に、私は実際に File.read を JS 内で動作させました。しかし、この方法は非常に厄介で、開発分野ではうまく機能しませんでした。タイムスタンプが変更されていないため、Rails は「親」の js ファイルを再コンパイルすることを知りませんでした。YUI を使用していない場合は、File.read ソリューションが機能する可能性がありますが、別のソリューションを探します。子モジュールに変更を加えるたびに、新しい行を入力して削除する必要があり、かなり面倒でした。

于 2013-07-10T13:52:40.227 に答える
0

パーシャルの内容に応じて、それらが含まれるオブジェクトを vars でラップできるため、次のことができます。

//*=require sub/file_a.js
//*=require sub/file_b.js
//*=require sub/file_c.js
//*=require sub/file_d.js

YUI().use('app', function(Y) {file_a + file_b ...})

それがあなたのケースに合っているかどうかはわかりませんが、パーシャルに何があり、 YUI().use が取る引数の種類がわからない...

于 2013-07-02T13:19:34.750 に答える