我的JSLink脚本不起作用

时间:2017-08-16 17:50:00

标签: javascript sharepoint-2016 jslink

我正在尝试使用JSLink ..最终......我遇到了一些麻烦,我似乎无法理顺。对于我在兔子洞的第一次尝试,我选择了一些非常简单的东西作为概念证明。所以我查阅了一个教程并想出了一个简单的脚本,在每个条目的Title字段周围绘制一个框并为文本设置样式。我不能让这个工作。你有没有机会看一下这段代码?我在JSLink框中使用了以下标记。

〜sitecollection /站点/文件夹/文件夹/ 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>”;
}

1 个答案:

答案 0 :(得分: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运行时,渲染器在List视图中查找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

您可以根据需要同时运行任意数量的脚本,只需将它们与管道分开即可。我也看过这个问题,但你可能想把'〜sites'换成'~sitecollection',并确保你访问的js文件是在网站集中的顶级网站上进行的! / p>

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

希望这有帮助。