Javascript JQuery插件子方法

Javascript JQuery插件子方法,javascript,jquery,typescript,Javascript,Jquery,Typescript,我在理解如何在JQuery插件中生成“子函数”时遇到了一些问题。 我想要达到的是以下几点 var tags = $('#tagContainer').ImageTags({ option1: "blah blah", option1: "blah blah", option1: "blah blah"}); tags.ShowTagAdd(someIdHere, someOtherId); 这样做的原因是,有时我需要在页面加载时强制显示我的标记添加对话框,我可以通过选项来实现,但我想让它更干净

我在理解如何在JQuery插件中生成“子函数”时遇到了一些问题。 我想要达到的是以下几点

var tags = $('#tagContainer').ImageTags({ option1: "blah blah", option1: "blah blah", option1: "blah blah"});
tags.ShowTagAdd(someIdHere, someOtherId);
这样做的原因是,有时我需要在页面加载时强制显示我的标记添加对话框,我可以通过选项来实现,但我想让它更干净:D到目前为止,这是我的代码,它是用TypeScript编写的,但应该像普通JQuery:D一样可读

我基本上不会运行我的方法
ShowTag(categoryid:number,characterId:number)
当调用子函数时,我该怎么做

    module ImageModule {
    export interface DefaultOptions {
        ImageId: number;
    }

    export class ImageTags {
        defaults: DefaultOptions = {
            ImageId: 0,
        };
        options: DefaultOptions;
        TagsContainer: JQuery;

        constructor(element: JQuery, options: DefaultOptions) {
            this.options = <DefaultOptions> $.extend({}, this.defaults, options);
            this.TagsContainer = element;
            var self = this;

        }


        ShowTag(categoryid: number, characterId: number) {
            console.log("test");
        }
    }

    $.fn["ImageTags"] = function (options) {
        return this.each(function () {
            if (!$.data(this, "plugin_ImageTags")) {
                $.data(this, "plugin_ImageTags", new ImageTags($(this), options));
            }
        });
    }
}
模块图像模块{
导出接口默认选项{
ImageId:编号;
}
导出类ImageTags{
默认值:默认选项={
ImageId:0,
};
选项:默认选项;
TagsContainer:JQuery;
构造函数(元素:JQuery,选项:DefaultOptions){
this.options=$.extend({},this.defaults,options);
this.TagsContainer=元素;
var self=这个;
}
ShowTag(类别ID:编号,字符ID:编号){
控制台日志(“测试”);
}
}
$.fn[“ImageTags”]=函数(选项){
返回此。每个(函数(){
if(!$.data(这是“插件\图像标签”)){
$.data(这个“plugin_ImageTags”,新的ImageTags($(这个),选项));
}
});
}
}

存档的一种方法是:

$.fn.ImageTags = function(...) {

    return {
        ShowTagAdd: function(...) {

        }
    };

};
由于使用该方法返回一个对象,您可以按照自己的方式来执行,但这打破了jQuery的可链接性原则

最好是:

(function($, undefined){

    $.fn.ImageTags = function(options) {

        var pluginName = 'ImageTags';
        var plugin = $(this).data(pluginName);

        if(plugin) {

            return plugin;

        } else {

            var settings = $.extend({}, options);

            return this.each(function() {

                var widget = $(this);

                var ShowTagAdd = function(...) {};

                var api = {
                    ShowTagAdd: ShowTagAdd
                };

                widget.data(pluginName, api);

            });

        }

    }

})(jQuery);
因此,您可以将方法定义为“private”,并在api中公开您喜欢的方法:

tags.ImageTags().ShowTagAdd(...);

使用闭包的好处是可以有一些私有方法


还有其他方法,但我现在没有时间

谢谢,在您的示例中,我将在哪里加载我的“主”类ImageTags?它是否类似于
var c=newimagetags($(this),options);var ShowTagAdd=c.ShowTag;var api…
好的,看看这个并检查一些插件,比如
tags.data('ImageTags').ShowTagAdd(...);