破解因爲異步執行而致使的JS插件未加載就使用的問題

相關組件版本:avalon 1.3.6ajax

這個問題一般會在如下情景出現:後端

頁面一加載完就要利用JS動態操縱頁面的DOM元素、爲各種插件賦初值等。api

以ueditor爲例,以往,配合後端渲染模板,直接就把初始的值輸出到頁面,ueditor天然就獲取到初始值了;但改成先後端徹底分離後,初始值須要依賴ajax讀取api得到,而後再調用ueditor的setContent()方法進行賦值,而ueditor的實例化和初始值的獲取這兩個操做是異步執行的(固然也能夠寫成同步執行,利用ueditor的ready()方法便可,但整體來講不太靈活),這樣就形成了一個不穩定的因素:到底在賦初值的時候,ueditor實例化好了沒有呢?異步

爲此,我思索後,得出以下方案:插件

var ue = UE.getEditor('content_editor');

function article_create_getFirstData() {
  if(typeof(ue) == "object") {
    initUeditor();
  } else {
    setTimeout('article_create_getFirstData()', 500);
  }
}
article_create_getFirstData();

其整體思路是,利用typeof判斷預設變量是否已爲object(即已實例化),若否,則定時從新進行判斷,直到實例化成功後,進行賦初值的操做。code

相關文章
相關標籤/搜索