0

一部のrequireJSセットアップに問題があります。以前に質問を投稿しましたが、最新の範囲が変更されました。

私はいくつか持っています

requirejs.config({
    paths: {
        'tmpl': 'vendor/upload/tmpl.min'
    }
});
require({
    paths: {
        'videoupload': 'vendor/upload/jquery.ui.videoupload'
    }
}, ['js/main_video.js'], function (App) {
    App.initial_video_upload();
});

そして最後にmain_video.js

define(['tmpl', 'videoupload'], function () {
        function initial_video_upload(tmpl, videoupload) {
            'use strict';
            $('#videoupload').videoupload({
                //...some code
            });
        }
        return{
            initial_video_upload: initial_video_upload
        }
    }
);

このコードは、requireJS (古典的に各ファイルをロードする) を使用しない場合、完全に機能します。実際、このコードがトリガーされると、メッセージが表示され続けますUncaught TypeError: Object [object Object] has no method 'tmpl'。このメソッドは で定義されていtmpl.min.jsます。そして、このメソッドは で呼び出されますvendor/upload/jquery.ui.videoupload

$.widget('videoupload', {
//...
_renderVideo: function (video) {
    this._templateElement().tmpl({
        id: video.id,
        name: video.title
    }).appendTo(this._listElement()).find(
        this.options['delete-selector']
    );

    return this;
},
//...

どうすればそれを管理できますか?(以前、このメソッド tmpl のエラー タイムアウト メッセージが表示されていましたが、現在は表示されなくなったので、これではないと思います)

4

2 に答える 2

0

質問コードに問題があるため、次のようにします。

define(['tmpl', 'videoupload'], function () {

これになるはずです:

define(['tmpl', 'videoupload'], function (tmpl, videoupload) {

最初のものは、ロードされた依存関係をクロージャー関数のローカル変数に公開しないため、問題になる可能性がありますが、提供されたコードからは、それが唯一のものであるかどうかはあまり明確ではありません.

また、オプティマイザを使用する予定がある場合、複数の requre.js 構成を使用することは良いことではないことにも言及したいと思います。構成は最後の構成によって上書きされるため、実際にはプロジェクト全体で構成を 1 つだけにすることをお勧めします。

このような:

requirejs.config({
    paths: {
        'tmpl': 'vendor/upload/tmpl.min',
        'videoupload': 'vendor/upload/jquery.ui.videoupload'
    }
});
于 2013-09-16T21:14:57.973 に答える
0

構成オブジェクトでは、パスは JS ファイルへのフル パスではなく、JS ファイルを含むディレクトリへのパスであるため、ファイルで次のような操作を行うことがmain_video.jsできます。

requirejs.config({
    paths:{
        'upload': 'vendor/upload'
    }

});
define(['upload/tmpl','upload/jquery_videoupload'],function(tmpl, videoupload) {
        function initial_video_upload(tmpl,videoupload){
            'use strict';
            $('#videoupload').videoupload({
                //...some code
            });
        }
        return{
            initial_video_upload: initial_video_upload
        }
    }
);

そしてメインアプリで:

requirejs.config({
    paths:{
        'js': 'path/to/your/js/folder'
    }

});
require(['js/main_video'], function(App) {
    App.initial_video_upload();
});
于 2013-09-16T20:44:02.397 に答える