0

次のようなプライベート動的呼び出し関数で延期された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/

私が探しているものを達成するチャンスはありますか?

次に示すように、遅延オブジェクトを使用しないと、コードは魅力的に機能します。

JavaScript、eval を使用せずにパブリック メソッド内の文字列としてプライベート関数を呼び出します (明らかにパターン)

ありがとう!

編集:

これが私の新しいコードです:

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();

問題は、遅延オブジェクトを作成しても何も起こらないことです。ここを見てください。

http://jsfiddle.net/cbelizon/pTaze/3/

4

3 に答える 3

0

promise は拒否または解決する必要があります。試してみるdeferred.resolve();と、done-Callback が呼び出されます。

Deferred が解決されると、deferred.then() または deferred.done() によって追加されたすべての doneCallbacks が呼び出されます。

ソース: http://api.jquery.com/deferred.resolve/

于 2013-06-27T10:39:06.927 に答える