我已经在Dynamics CRM的Web资源中使用了Kendo UI多年。我的组件需要使用ClientGlobalContext.js.aspx。在Dynamics 365 Online版本9.0.2.54中,我发现较新版本的ClientGlobalContext.js.aspx加载了自己的jQuery版本,而没有检查是否已经存在。它使用document.write语句执行此操作,因此始终在我的代码之后加载此版本的jQuery。我可以通过使用jQuery加载行注释掉的此调用生成的JavaScript暂时解决此问题,因为大多数实例/上下文特定信息来自xhr请求,该请求属于此页面的一部分,但我正在寻找支持将毫无问题地升级并跨实例工作的解决方案。 这些是我想到的选项,我正在寻找关于哪个是最佳的建议以及关于该选项的任何其他指导。我考虑过以下几点:
等待ClientGlobalContext可用然后测试jQuery,如果不存在则使用document.write包含它(不会包含某些版本,并且可以随时停止包含它),一旦jQuery可用,加载Kendo并继续我的页面。再说一遍,我没有办法改变微软页面,因为那里有异步调用,这可能会给我带来一个定时器循环 - 我看不出这是不是很难看,但我可能会遗漏一些东西,而且丑陋与否可能是最好的选择。
说服微软在重新加载之前检查jQuery 提供没有jQuery的备用支持文件。自从我 没有看到其他人表达这种挫折感,我不是 认为这很可能。目前还不是Dynamics 365的想法 论坛,这是Telerik的建议,但这是一个合理的期望吗?
答案 0 :(得分:0)
jQuery的使用是supported and recommended(在某些情况下)。
我们建议您将jQuery与HTML Web资源一起使用
我不认为向微软提出帮助是不合理的。那说它可能没那么有用;
它可能会更快,并节省您的时间,只需在您自己的代码中实现修复。
您可能需要考虑的解决方案(在上文中提到)是using jQuery.noConflict
。 Scott Durow提出了类似问题的解决方案here。
确定jQuery库的自定义“命名空间”。我正在使用'xrmjQuery'
在jquery.js脚本的末尾添加以下行:
/* jQuery script goes here */ window.xrmjQuery = jQuery.noConflict(true);
在jquery_ui.js脚本中(注意' - '已更改为下划线,因为CRM不允许它们出现在Web资源名称中), 将整个文件包装在以下行中:
(function ($,jQuery) { /*! jQuery UI Goes here */ })(window.xrmjQuery,window.xrmjQuery);
- 醇>
在使用jQuery和jQuery-UI的JavaScript Web资源中,将代码包装在以下内容中:
(function($){ // Your Javascript goes here and can reference $ as usual // e.g. var someField = $('#fieldName'); })(window.xrmjQuery);
这种技术称为jQuery的封装和命名空间。
关于可支持性和未来升级。值得记住的是staying supported means。
...你可以(有合理的信心)假设你的 实现将;
- 功能正常。
- 如果不支持,Microsoft支持将提供帮助。
- 升级时会继续工作(除非功能被弃用 - 这种情况会发生,但通常会提前几年通知)。
我在上面链接的第一篇文章和this构成了支持jQuery的上下文,但没有涵盖这种情况的具体细节。我建议您实施的任何编码解决方案可能升级而不会出现问题。这表示在升级生产之前Microsoft建议进行测试和验证。
更新Sandbox实例后...测试更新 您的解决方案和自定义。