我正在尝试调整jquery插件(https://raw.github.com/loopj/jquery-tokeninput/master/src/jquery.tokeninput.js)以添加一个更新特定默认设置的方法(hintText)。
已经提供了一些方法:
var methods = {
init: function(url_or_data_or_function, options) {
var settings = $.extend({}, DEFAULT_SETTINGS, options || {});
return this.each(function () {
$(this).data("tokenInputObject", new $.TokenList(this, url_or_data_or_function, settings));
});
},
clear: function() {
this.data("tokenInputObject").clear();
return this;
},
add: function(item) {
this.data("tokenInputObject").add(item);
return this;
},
remove: function(item) {
this.data("tokenInputObject").remove(item);
return this;
},
get: function() {
return this.data("tokenInputObject").getTokens();
}
}
我补充说:
updateHintText: function (hintText) {
DEFAULT_SETTINGS.hintText = hintText;
}
这会更新它,但它不适用于已创建的实例。例如,我将此方法称为:
$("#textbox1").tokenInput("updateHintText", 'updated hint');
但是下次显示提示下拉列表时,它仍会显示原始提示:
function show_dropdown_hint () {
if(settings.hintText) {
dropdown.html("<p>"+settings.hintText+"</p>");
show_dropdown();
}
}
所以即使DEFAULT_SETTINGS.hintText得到更新,settings.hintText仍然引用实例化插件时传入的原始设置 - 这确实有意义。
那么,您如何更改我的updateHintText()方法以使settings.hintText返回新设置?现在我所做的解决方法是创建一个新变量来保存新的设置值,并修改show_dropdown_hint()方法以使用这个新变量而不是settings.hintText(如果它是非空的)。但我更喜欢使用设置对象。
感谢。
答案 0 :(得分:3)
这似乎是因为您附加了默认设置,而不是在init函数中从此行扩展的实际设置哈希。
var settings = $.extend({}, DEFAULT_SETTINGS, options || {});
问题是此设置哈希超出了方法的范围,因此您无法访问它。
尝试并在init方法之外移动设置的实例化,以便您可以访问它。然后你可以使用你的函数来修改它:
// Additional public (exposed) methods
var settings = {};
var methods = {
init: function(url_or_data_or_function, options) {
settings = $.extend({}, DEFAULT_SETTINGS, options || {});
return this.each(function () {
$(this).data("tokenInputObject", new $.TokenList(this, url_or_data_or_function, settings));
});
},
updateHintText: function (hintText) {
settings.hintText = hintText;
}
//..other methods...