2

我正在尝试编写 jQuery 的扩展,您可以通过字符串传递方法,并将这些方法应用于指定的元素。但是,我无法理解以这种方式调用方法如何确定调用方法时最初设置的选项。

考虑一下(以 jQuery UI 为例):

$('#foo').datepicker({ someoption: true });

$('#foo').datepicker('setDate','10/10/2013');

第二个电话怎么知道someoption设置了什么?

例如,如果someoption是,dateFormat那么日期选择器将自动更改提供的日期格式以匹配formatDate...中指定的格式第二个调用如何知道的值formatDate是什么?

我可以看到这是如何实现的唯一方法是这样(显然缺少一些细节):

var datepickers = new Array();

$.fn.datepicker = datepicker;
function datepicker(options){
    // Get the selector somehow
    var selector = somefunction($(this));
    // Save the options to the datepickers array
    // for the given selector
    datepickers[selector] = options;
}

这是实现这一目标的正确方法吗?如果是这样,如何获得选择器,它是否可靠(这部分的潜在解决方案

4

1 回答 1

2

我能看到这是如何实现的唯一方法就是这样

是的,将它们存储在插件范围内的静态变量中是一种方法。但是:您需要一种可靠的方法来确定selector所有 DOM 元素(您的somefunction)的唯一性,并且您将遇到内存泄漏,因为您不知道何时可以取消存储信息。

相反,大多数插件确实使用标准的jQuery.data()方法,它可以解决这两个问题。从日期选择器来源

// in the init function:
$.data(target, "datepicker", inst);

// in other methods:
var inst = $.data(target, "datepicker");

其他方式(仅出于完整性考虑):将数据直接存储在 DOM 对象的属性中(这可能导致某些已知浏览器上的内存泄漏),或者从方法返回一个小部件实例对象(而不是可链接的 jQuery 包装器 - 这需要与您请求的调用策略不同)。

于 2013-06-05T10:06:52.323 回答