如何在jquery插件中正确进行回调。
(function($) {
var parameter = {
first:'1',
second:'2',
call: $.noop
};
var something = 'yes';
var testf = function(){
// i neeed launch callback here;
var something_else = something + 'no';
alert(something_else)
}
$.fn.sadstory = function(options) {
if (options && typeof options === 'object')
{
$.extend(parameter, options);
}
testf();
return this;
}
})(jQuery);
我需要atccess var和owerwrite或与他做其他事情。
$('elm').sadstory({
call: function(){
this.something = 'no';
}
});
并且结果将通过带有文本nono而不是yesno的警告框,现在正确地进行此回调。
答案 0 :(得分:0)
我认为你可以这样做:
$.fn.sadstory = function(options,callback) {
if (options && typeof options === 'object')
{
$.extend(parameter, options);
}
testf();
// example, var c is passed to callback function
var c= "abc";
callback(c);
return this;
}
你可以像
一样打电话.sadstory({..},function(c) {
console.log(c) // logs "abc"
})
也应该作为选项的属性
答案 1 :(得分:0)
this.something
不存在。唯一的something
是一个变量,其范围为testf
。
解决方案是将对象作为参数传递给回调,并允许回调修改此对象。
(function($) {
var parameter = {
first:'1',
second:'2',
call: $.noop
};
var something = 'yes';
var testf = function(){
// Initialize the string to a default value
var stringGenerationParams = { something: 'yes' };
// Allow the callback to modify the string generation params
parameter.call(stringGenerationParams);
// At this point, stringGenerationParams.something may have been
// modified by the callback function
var something_else = stringGenerationParams.something + 'no';
alert(something_else)
}
$.fn.sadstory = function(options) {
if (options && typeof options === 'object')
{
$.extend(parameter, options);
}
testf();
return this;
}
})(jQuery);
现在,这将有效:
$('elm').sadstory({
call: function(e) {
e.something = 'no';
}
});