2013-04-18 176 views
0

我有一個功能由先用RequireJS問題加載插件調用jQuery插件功能是插件功能裏面後,我的功能已經恢復,從而requirejs只被執行hasMessageParent總是返回null。我真的很困惑,因爲這之前工作正常,我不知道有什麼變化和打破。我如何修復,讓myMsg在繼續之前被設置爲函數返回?requirejs加載我的jQuery插件異步

hasMessageParent: function() { 
    var myMsg = null; 
    var ctrl = '#myDiv'; 
    require(["my_msgcheck"], function() { 
     // this gets executed after the return already happened, it returns true 
     myMsg = $(ctrl).msg_check('hasMessage'); 
    }); 
    // this always returns null because the require jquery plugin function is executed after the return already happened 
    return myMsg ; 
}, 

回答

1

您不能通過單獨修改函數來解決此問題,您必須將「my_msgcheck」添加到模塊的define調用中。

另一種選擇是使用回調,如果你真的只想加載它的功能。但是這可能是一個糟糕的代碼結構的標誌。

var hasMessageParent = function(callback) { 
    var myMsg = null; 
    var ctrl = '#myDiv'; 
    require(["my_msgcheck"], function() { 
     // this gets executed after the return already happened, it returns true 
     myMsg = $(ctrl).msg_check('hasMessage'); 
     callback(myMsg); 
    }); 
}; 
hasMessageParent(function (msg) { 
    // ... 
}); 
+0

謝謝!回調的作品,但我不明白的第一種方法來解決你提到的,添加定義調用哪個模塊? – user391986

+0

@ user391986我的意思是,如果要直接返回myMsg,則必須在函數調用之前發生require調用。但requirejs的方式是將您的代碼定義爲模塊:http://requirejs.org/docs/api.html#define – jgillich

+0

好的,非常感謝jgillich! – user391986