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

在配置对象中,路径不是 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 回答
0

问题代码中存在问题,因此:

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

应该变成这样:

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

第一个不会将加载的依赖项暴露给闭包函数的局部变量,所以这可能是一个问题,尽管从提供的代码中不清楚它是否是唯一的。

我还想提一下,如果您打算使用优化器,那么使用多个 requre.js 配置并不是一件好事。配置将被最后一个覆盖,因此实际上整个项目只有一个配置是个好主意。

像这样:

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