【问题标题】:Object not creating using module pattern of JavaScript in CRM 2011在 CRM 2011 中未使用 JavaScript 的模块模式创建对象
【发布时间】:2013-09-21 17:48:05
【问题描述】:

我已经按照模块模式为我的 CRM 2011 表单设计了 JavaScript 逻辑。在表单加载时,有时我会收到'Crm object undefined' 的警报,但在刷新(单个或多个)时,此错误会消失(工作顺利)。

经过一番挣扎后,我仍然无法理解为什么会发生这种情况。它与模块模式有什么关系?因为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");
}

【问题讨论】:

    标签: javascript jquery dynamics-crm-2011 dynamics-crm module-pattern


    【解决方案1】:

    我认为问题出在 FSX 对象上。 这是在哪里加载的?

    如果在定义你的模块的脚本执行之前没有加载,代码会出错,Crm 将是未定义的。

    有一篇写得很好的文章 here 关于为 CRM 表单加载依赖库。

    它提出了多种解决方案: 1) 使用 RequireJs 或 HeadJs 来动态加载你的依赖脚本。 2) 通过将库包含在功能区命令中来加载库。

    【讨论】:

    • FSX 正在另一个脚本文件中创建,该文件在此文件之前加载。怎么可能没有创建 FSX?你的意思是 JavaScript 也会出现异常行为?
    • 这不是 Javascript。它与 CRM 如何加载您的脚本有关。脚本是异步加载的。上面的代码可以在 FSX 完全加载之前运行。尝试在功能区中加载 FSX 脚本。功能区脚本是第一个加载的,希望您的脚本将在 FSX 创建后运行。我上面提到的文章提供了有关如何执行此操作的信息。
    • 是的,这篇文章很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2013-09-19
    相关资源
    最近更新 更多