我正在尝试将jQuery延迟使用私有动态调用函数,如下所示:
var module = (function(){
var privateFuncs = {
privateMethod: function(val) {
console.log(val);
}
};
var success = function() {
console.log('Success');
};
var publicMethod = function() {
var functionString = "privateMethod";
privateFuncs[functionString]('test').done(function(){
success();
});
};
return {
init: publicMethod
};
})();
module.init();
我收到了这个错误:
privateFuncs[functionString](...) is undefined
http://jsfiddle.net/cbelizon/pTaze/1/
有没有机会实现我正在寻找的目标?
如果不使用延迟对象,代码就像魅力一样,你可以在这里看到:
谢谢!
编辑:
这是我的新代码:
var module = (function(){
var privateFuncs = {
privateMethod: function(val) {
console.log(val);
}
};
var success = function() {
console.log('Success');
};
var publicMethod = function() {
var functionString = "privateMethod";
var deferred = $.Deferred(privateFuncs[functionString]('test'));
deferred.done(function(){
success();
});
};
return {
init: publicMethod
};
})();
module.init();
问题是当我创建延迟对象时没有任何反应,请看这里:
答案 0 :(得分:1)
这不正确使用jQuery.Deferred:
var module = (function(){
var privateFuncs = {
privateMethod: function(val) {
console.log(val);
}
};
var success = function() {
console.log('Success');
};
var publicMethod = function() {
var functionString = "privateMethod";
var deferred = $.Deferred(function(defer) {
privateFuncs[functionString]('test');
defer.resolve()
});
deferred.done(function(){
success();
});
};
return {
init: publicMethod
};
})();
module.init();
答案 1 :(得分:0)
承诺需要被拒绝或解决。尝试deferred.resolve();
,应该调用你的完成回调。
解决Deferred后,添加任何doneCallbacks 调用deferred.then()或deferred.done()。
答案 2 :(得分:0)
我终于完成了我的目标:
以下是解决方案:
var module = (function(){
var privateFuncs = {
privateMethod: function(val) {
alert(val);
}
};
var success = function() {
alert('Success');
};
var publicMethod = function() {
var functionString = "privateMethod";
var deferred = $.Deferred();
deferred.resolve(privateFuncs[functionString]('test'));
deferred.done(function(){
success();
});
};
return {
init: publicMethod
};
})();
module.init();
我误解了延迟对象的使用及其状态。
谢谢!