为jQuery(Mobile)小部件/插件添加显式依赖项

时间:2013-12-05 09:32:40

标签: jquery jquery-mobile jquery-plugins dependencies requirejs

我无法找到解决以下问题的优雅解决方案。

我创建了一个小的jQuery Mobile小部件,它使用与金额和货币相关的内容丰富了输入字段。为了不重新发明轮子,我已经包含了 autoNumeric.js 插件。例如,在_create方法中,我正在执行以下操作。

/**
 * autoNumeric.js required (https://github.com/BobKnothe/autoNumeric)
 */
(function($, window, document, undefined) {     
    "use strict";

    $.widget("mobile.amountinput", $.mobile.textinput, {

        // other code here

        _create : function() {

            // other code here

            $element.autoNumeric('init');

            $element.focus(function(event) {
                var o = { aDec: ',', aSep : '.', pSign: 's', aSign: '' };
                $element.autoNumeric('update', o); 
            });

            $element.blur(function(event) {
                var o = { aDec: ',', aSep : '.', pSign: 's', aSign: ' €' };
                $element.autoNumeric('update', o); 
            });
        }
    });

    $.mobile.document.bind("pagecreate create", function(e) {
        $.mobile.input.prototype.enhanceWithin(e.target, true);
    });

}(jQuery, window, document));

autoNumeric.js 是通过 require.js 加载的,但我想使依赖项显式化(例如在 require.js 模块定义中)。通过这种方式,我可以确定 autoNumeric.js 存在且已正确导入。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

以下内容应该有效。使用适合您情况的任何内容替换传递给'autonumeric'的依赖项列表中的define依赖项。我不确定为什么在参数列表中需要undefined但我保留了它。

(function (factory) {
    // If in an AMD environment, define() our module, else use the
    // jQuery global.
    'use strict';
    if (typeof define === 'function' && define.amd)
        define(['jquery', 'autonumeric'], function ($) {
            factory($, window, document);
        });
    else
        factory($, window, document);
}(function($, window, document, undefined) {
    "use strict";

    $.widget("mobile.amountinput", $.mobile.textinput, {

        // other code here

        _create : function() {

            // other code here

            $element.autoNumeric('init');

            $element.focus(function(event) {
                var o = { aDec: ',', aSep : '.', pSign: 's', aSign: '' };
                $element.autoNumeric('update', o);
            });

            $element.blur(function(event) {
                var o = { aDec: ',', aSep : '.', pSign: 's', aSign: ' €' };
                $element.autoNumeric('update', o);
            });
        }
    });

    $.mobile.document.bind("pagecreate create", function(e) {
        $.mobile.input.prototype.enhanceWithin(e.target, true);
    });

});