无法获取方法requireJS

时间:2013-09-16 15:25:44

标签: javascript jquery requirejs

我遇到了一些奇怪的问题。我有这个

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

和这个

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

在文件jquery.ui.videoupload.js中,我有一个tmpl方法的调用,该方法在tmpl.min.js中定义,但我收到了消息

Uncaught TypeError: Object [object Object] has no method 'tmpl'

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

  1. 您的第一个代码段是将配置选项传递给require函数。 require,是一种加载依赖项并使用它们执行某些代码的方法。如果要将配置选项传递给require.js,requirejs.config就是您想要的:

    // configurations to be used in your module definitions
    requirejs.config({
        paths: {
            'template': 'tmpl.min',
            'videoupload.widget': 'jquery.ui.videoupload'
        }
    });
    
    // load your main module and kick things off
    require(['js/main_video.js'], function(App) {
        App.initial_video_upload();
    });)
    
  2. 您的第二个代码段是声明依赖项,但未将它们传递给回调函数:

    define(['template','videoupload.widget'], 
    // these are now accessible within the function's scope:
    function(template, videoupload.widget) {
            function initial_video_upload(){
                'use strict';
                $('#videoupload').videoupload({
                    //...some code
                });
            }
            return{
                initial_video_upload: initial_video_upload
            }
        }
    );
    
  3. 此外,我假设jQuery是你的videoupload.widget的依赖项。你是怎么加载的?您可能需要在requirejs.config中添加额外的“shim”配置:

    requirejs.config({
        paths: {
            'template': 'tmpl.min',
            'videoupload.widget': 'jquery.ui.videoupload'
        },
        shim: {
          "videoupload.widdget": ["jquery"]
        }
    });