0

我已經根據我的CRM 2011表單的模塊模式設計了JavaScript邏輯。在表單加載的時候,我有時會收到警報'Crm object undefined',但刷新(單個或多個)時,此錯誤消失(工作順利)。在CRM 2011中不使用JavaScript模塊模式創建的對象

經過相當困難的掙扎後,我仍然無法理解爲什麼會發生這種情況。它與模塊模式有什麼關係?因爲onLoad函數被解僱了,但是困擾我的是爲什麼有時Crm對象沒有被創建。

var Crm = (function (FSX) { 
    var xrm = { 
     date: { 
      setDate: function (sourceAttribute, targetAttribute) { 
       // ... date setting logic ... 
      } 
     } 
    } 
    return xrm.date; 
}(FSX)); 

function onLoad() { 
    if (typeof Crm === 'undefined') { 
     alert('Crm object undefined'); 
     return; 
    } 
    Crm.setDate("fsx_source", "fsx_target"); 
} 

回答

1

我認爲問題在於FSX對象。 這是哪裏裝的?

如果在定義您的模塊的腳本執行之前尚未加載代碼,則代碼將出錯,並且Crm將被定義爲未定義。

有一篇很好的文章here關於加載CRM窗體的依賴庫。

它提出了多種解決方案: 1)使用RequireJs或HeadJs動態加載您的依賴腳本。 2)通過將它們包含在Ribbon命令中來加載庫。

+0

FSX正在另一個在此文件之前加載的腳本文件中創建。 FSX怎麼沒有被創建?你的意思是JavaScript也可能表現異常? –

+0

這不是Javascript。它與CRM如何加載腳本有關。腳本異步加載。上面的代碼可以在FSX完全加載之前運行。嘗試在功能區中加載FSX腳本。功能區腳本是第一次加載,希望您的腳本在FSX創建後運行。我上面提到的文章有關於如何做到這一點的信息。 –

+0

是的,這是一個有用的文章。 –