3

我已经构建了一个 jQuery 插件,但现在我需要在插件之外使用插件中的一个功能。

插件

(function ($) {
    jQuery.fn.vierGewinnt = function () {
 var VierGewinnt = function (config) {
            this.view = config.view;    
            this.dx;
            this.turn = 1;
        }
VierGewinnt.prototype.setToken = function (column) {
            for (var i = this.rows; i > 0; i--) {
                if (this.gamearray[column][i] == 0) {
                    this.gamearray[column][i] = "red";    
                    this.turn++;
                    this.findWinner(column, i);
                    break;
                }
            }

        }})(jQuery);

main.js 我试过了:

$.setToken()
$.fn.vierGewinnt.setToken()
$.fn.vierGewinnt.VierGewinnt.setToken()

也许有人有线索!提前谢谢!

4

3 回答 3

9

您需要做的就是返回函数/插件闭包并创建任何您想要在插件外部控制的方法作为闭包 ($this) 的属性。

    $.fn.vierGewinnt = 功能(选项){

        变量 $this = 这个;

        $this.setToken = function() {
            // 设置令牌
        };

        返回$这个;
    };

然后保存对插件的引用,以便稍后调用该方法。

    var vierPlugin = $('.some-element').vierGewinnt();
    vierPlugin.setToken(); // 在插件外部设置令牌

于 2014-01-14T18:48:50.227 回答
4

你这样做的方式,你不能从外面调用它。

有一些模式可以让您制作 js/jquery 小部件。

您正在尝试将“正常”原型与 jQuery 结合起来。

如我所见,您有两个选择。

  1. 包装您的 jQuery 方法以返回构造函数的实例。您可以在其上调用原型方法。就像是:

    $.fn.vierGewinnt = function(config){ 
        return new VierGewinnt (config); 
    };
    

    然后你可以实例化插件并调用方法

    var plugin = $('#someSelector').vierGewinnt();
    plugin.setToken(column);
    

    在这种情况下,几乎所有代码都可以超出(function ($)块。您只是使用 jQuery 作为包装器,其他一切都只是普通的 javascript。据我所知,您的插件没有在任何 DOM 元素上调用。在那种情况下,我在 jQuery 插件中看不到太多意义......它是纯 javascript。如果是这种情况,只需从您的示例中删除所有 jQuery 内容,它就会起作用。

  2. 使用不同的插件模式。就我个人而言,我喜欢 jQueryUI 小部件工厂方法,但您必须为其包含 jQueryUI。文档

于 2013-01-02T22:02:49.440 回答
0

注意:使公共 setter 函数返回 '$this':

this.setToken1 = function() {
  // setting token
  return $this;
};

this.setToken2 = function() {
  // setting token
  return $this;
};

允许使用 jQuery 风格的链接:

vierPlugin.setToken1().setToken2();
于 2016-09-12T12:26:17.550 回答