【问题标题】:Fails to call a plugin调用插件失败
【发布时间】:2014-01-03 02:36:24
【问题描述】:

我正在尝试开发一个将数据网格呈现为 html 元素的插件。例如在:

<div id="datagrid">
    <!-- Renderizado via Backbone.js -->
</div>

我有这个插件定义:

// csDatagrid.js
(function($) {
    $.fn.csDatagrid = function(options) {
       // Code ...
    };
}, (jQuery));

我这样调用函数:

// csAuditarSesiones.js
$("#datagrid").csDatagrid({
    columns: cols,
    url: $("#sfAction").val(),
    filterBy: 'user_str'
});

Chrome 说:

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

加载库队列(Chrome 开发者工具):

  1. jQuery
  2. csDatagrid(我的插件)
  3. csAuditarSesiones(带有当前页面代码的脚本,有插件调用)

谢谢!

编辑 1

显然插件没有加载,跟随代码总是打印“未加载!”:

if(jQuery().csDatagrid) {
    console.log("Loaded !");
}else{
    console.log("Not Loaded !");
}

【问题讨论】:

  • 我按照link 中的详细步骤进行操作。这个,为我工作。

标签: jquery-plugins


【解决方案1】:

这里的原因是您在文档就绪事件中定义您的插件。因此调用该插件的元素必须在插件加载完成后调用该插件。

尝试在诸如 load\ready 事件之外定义新插件。

(function($) {
        $.fn.csDatagrid = function(options) {
           // Code ...
        };
    }, (jQuery));

$(document).ready(function(){
  $("#datagrid").csDatagrid({
    columns: cols,
    url: $("#sfAction").val(),
    filterBy: 'user_str'
});

});

仅供参考(现在一定要阅读)。 http://learn.jquery.com/plugins/basic-plugin-creation/

编辑

你有可能加载了多个 jQuery 版本吗?当存在冲突时,可能会发生这种情况。还要确保在 javascript 文件之后和文档准备函数之前加载您的插件。

还有另一种(我不知道为什么我相信它是在加载多个版本时)发生的现象,您必须将 $ 调用添加回您的 ready 函数。比如。

$(document).ready(function($){
   //TODO: Code here
});

【讨论】:

  • 我阅读了文档,但我还没有明确是否在就绪侦听器中编写插件。因此,更改这些行,但插件仍然无法正常工作。插件是在另一个文件中定义的,这很重要吗?
  • 不,我只加载一个 JQuery 版本。
【解决方案2】:

您立即调用的函数的最后一行有错误。

}, (jQuery));应该是:

})(jQuery);

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2020-11-06
    • 2015-06-28
    • 1970-01-01
    • 2020-03-03
    相关资源
    最近更新 更多