Javascript JQuery插件子方法
我在理解如何在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); 这样做的原因是,有时我需要在页面加载时强制显示我的标记添加对话框,我可以通过选项来实现,但我想让它更干净
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(...);