0

我正在尝试使用 JSLink ..finally.. 我遇到了一些我似乎无法解决的问题。对于我第一次冒险进入兔子洞,我选择了一些超级简单的东西作为概念证明。所以我查阅了一个教程并想出了一个简单的脚本来围绕每个条目的标题字段绘制一个框并设置文本样式。我不能让它工作。你有机会帮我看看这段代码吗?我在 JSLink 框中使用了以下标记。

~sitecollection/site/文件夹/文件夹/file.js

〜站点/文件夹/文件夹/file.js

.js 文件与我尝试修改的列表视图 WebPart 存储在同一站点上。该列表只有默认的“标题”列。

(function () {
            var overrideContext = {};
            overrideContext.Templates = {};
            overrideContext.Templates.Item = overrideTemplate;

            SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideContext);
}) ();

function overrideTemplate(ctx) {
            return “<div style=’font-size:40px;border:solid 3px black;margin-bottom:6px;padding:4px;width:200px;’>” + ctx.CurrentItem.Title + “</div>”;
}
4

1 回答 1

0

看起来好像您正在尝试覆盖上下文 (ctx) 项本身,实际上您只是想覆盖列表字段和显示该字段的列表视图。说得通?

首先,将 overrideContext.Templates.Item 更改为 overrideContext.Templates.Fields :

(function () {
            var overrideContext = {};
            overrideContext.Templates = {};
            overrideContext.Templates.Fields = {
            // Add field and point it to your rendering function
            "Title": { "View": overrideTemplate },
            };  
  SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideContext);
        }) ();

然后,当 JSLink 运行时,渲染器会在列表视图中查找 Title 字段,并应用您的 overrideTemplate 函数。

function overrideTemplate(ctx) {
            return “<div style=’font-size:40px;border:solid 3px black;margin-bottom:6px;padding:4px;width:200px;’>” + ctx.CurrentItem.Title + “</div>”;
}

在一个 SharePoint 页面上运行多个 JSLink 而言,运行多个 JSLink 脚本是完全可能的,它们只需要用管道“|”分隔即可 象征。我经常使用 SharePoint Online,并且我看到以下格式一直有效(抱歉,Sascha!)。

~site/yourassetfolder/yourfilename.js | ~site/yourassetfolder/anotherfilename.js

您可以根据需要同时运行任意数量的脚本,只需将它们与管道分开即可。我在 prem 也看到过这个,但是您可能希望将 '~sites' 换成 '~sitecollection' 并确保您正在访问的 js 文件位于站点集合中的顶级站点(如果这样做)!

我注意到在列表或页面上运行多个 JSLink 时,因为它们都在进行客户端渲染,太多会减慢您的页面速度。如果发生这种情况,您可能需要考虑将它们组合到一个 JSLink 脚本中,这样服务器只需调用一个文件即可返回到客户端来完成列表所需的所有渲染。

希望这可以帮助。

于 2017-10-26T07:36:17.943 回答