当前位置: 代码迷 >> SharePoint >> 在CustomFieldType中注册js到页面下
  详细解决方案

在CustomFieldType中注册js到页面下

热度:263   发布时间:2016-05-02 07:33:10.0
在CustomFieldType中注册js到页面上
我有一个Custom Field Type,可以在SharePoint 2007/2010上正常工作。在fldtypes_myfield.xml中定义了如下的"DisplayPattern":
<RenderPattern Name="DisplayPattern">
<HTML><![CDATA[<script type="text/javascript" src="/_layouts/myfield/myjs.js"></script>]]></HTML>
<HTML><![CDATA[<img src="/_layouts/images/myfield/pic.png" onload="myfun()">]]></HTML>
</RenderPattern>

效果很简单,图片加载完后执行myjs里的myfun方法。当把这个自定义的Field部署到SharePoint 2013后出现了问题,在ListView页面下,我的Field内容为空,firebug报错为:myfun is not defined. 原因在于myjs.js没有被加载。所以我想请问,为什么在2013下myjs.js没有被加载?

注:
1 在fldtypes_myfield.xml中,CAMLRendering是true。
2 myjs.js的src是正确的,拷贝到浏览器地址栏可以访问。
3 看页面源代码的时候,<script type="text/javascript" src="/_layouts/myfield/myjs.js"></script>是输出到页面上的。
4 这个Field只在SharePoint 2013的2013 User experience下不工作,在2010 user experience下是工作的。
5 这个Field只在ListView下显示内容为空,在DisplayForm是正常显示的。

------解决方案--------------------
SharePoint 2013的网站有两种运行模式:2010和2013。
2010模式是兼容2010 的 solution用的,使用的文件来自C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14
2013模式则是采用新的Metro风格的UI,使用的文件来自
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15

如果DisplayPattern可以在2010模式下工作,不能在2013模式,可以考虑检查
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15下对应的位置是否有 myjs.js。

但是如果myjs.js使用了一些SharePoint 2013里面过期的方法,可能需要作相应修改。
  相关解决方案