我想在jQuery插件中使用jQuery的.data()工具,但我得到了一些奇怪的结果。 这里是我的插件的削减版本,相关代码:jQuery .data()和插件
(function($){
var methods = {
init : function(options) {
// Do some stuff
this.data('name', 'New Component');
return this;
},
getStateData : function() {
// Function returns all data for save
var state = new Object;
state.name = this.data('name');
// snip ... Add some other bits to state
// ...
return state;
},
setStateData: function (args) {
var key = args[0];
var value = args[1];
// snip
this.data(key, value);
}
};
$.fn.component7Segment = function(method) {
if (methods[method]) {
return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || ! method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.designComponent');
}
};
})(jQuery);
如果我打电话$(instance-of-plugin).component7Segment('getStateData');
插件返回正确的“姓名”但如果我叫setStateData
更改名称它并没有改变“名字'的价值,当我下一个电话getStateData
。
在每个功能做console.log(this);
看起来略有不同,所以我开始尝试:
$.data($('#object-id'), 'name', value);
这仍然没有收到预期的效果。
任何人都可以看到我失踪?
谢谢,我通过调用它(“setStateData”,[“name”,“Foo”])和console.log(key +''+ value)显示正确的结果。我换了你的方法,但似乎没有什么区别。 – JimBlizz
仅供参考您的示例在JSFiddle中工作,但不在我的应用程序中......非常奇怪...... – JimBlizz
@JimBlizz:这很奇怪。你最初的方式应该是... –