为什么这个插件模式不会返回我想要的wjat?

时间:2015-06-16 15:31:12

标签: jquery amd

我正在尝试使用模块化模式创建一个jQuery插件,因此我可以将它与requirejs一起使用。我期待下面的代码表现一种方式而不是。我希望,如果有人能向我解释为什么它没有回归我认为它应该帮助我理解。这是代码:

{
    "test": "test2"
}

现在有了上述内容,我期待这会记录“嘿”

define(['jquery'], function($){

'use strict';

var pluginName = "myPluginName";

var Plugin = function( element, options ) {

    var _init = function() {
        console.log("hey");
    }

    return  {
        init: _init;
    }

}

$.fn[pluginName] = function ( options ) {
    return this.each(function () {
        if (!$.data(this, "plugin_" + pluginName)) {
            $.data(this, "plugin_" + pluginName,
            new Plugin( this, options ));
        }
    });
};});

任何解释都将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

$('#elemId').myPluginName()返回一个jQuery对象。

要执行init(),您必须访问数据属性

中的Plugin对象
$('#elemId').myPluginName().data('plugin_myPluginName')

这将返回可以执行的对象init: () {} $('#elemId').myPluginName().data('plugin_myPluginName').init()



var pluginName = "myPluginName";

var Plugin = function( element, options ) {

    var _init = function() {
        console.log("hey");
    }

    return  {
        init: _init
    }

}

$.fn[pluginName] = function ( options ) {
    return this.each(function () {
        if (!$.data(this, "plugin_" + pluginName)) {
            $.data(this, "plugin_" + pluginName,
            new Plugin( this, options ));
        }
    });
};

console.log($('body').myPluginName().data('plugin_myPluginName'));

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;