2017-08-16 96 views
0

我試圖使用JSLink ..最後..我有一些麻煩,我似乎無法理順。對於我第一次冒險兔子洞,我選擇了一些超級簡單的東西作爲概念證明。所以我查了一個教程,想出了一個簡單的腳本,在每個條目的Title字段周圍繪製一個框,並設置文本的樣式。我無法得到這個工作。有沒有可能爲我看一下這段代碼?我在JSLink框中使用了以下標記。我的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>」; 
} 
+0

你的控制檯說什麼? –

+0

我總是使用這個siteassets庫。你能確保該頁面上沒有其他jslink?因爲兩個jslink腳本不能同時在一個頁面上存在。 – Sascha

回答

0

看起來好像你正試圖覆蓋範圍內(CTX)項目本身,你其實只是想重寫名單場和在其中顯示字段列表視圖。合理?

首先,overrideContext.Templates.Item改爲ov​​errideContext.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運行渲染器會在列表視圖中的標題字段,並套用您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頁面上運行多個JSLinks而言,這是很有可能同時運行多個JSLink腳本,他們只需要通過管道分離「|」符號。我使用SharePoint Online很多,我發現以下格式一直在運行(對不起Sascha!)。

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

您可以根據需要同時運行多個腳本,只需將它們與管道分開即可。我也已經看到了這一點,但是您可能想爲'〜sitecollection'替換'〜網站',並確保您訪問的js文件位於網站集的頂級網站中(如果您這樣做的話)!

我注意到當在列表或頁面上運行多個JSLinks時,因爲它們都在進行客戶端渲染,太多會減慢頁面的速度。如果發生這種情況,您可能需要考慮將它們組合成一個JSLink腳本,以便服務器只需調用一個文件即可返回給客戶端,以完成列表所需的所有呈現。

希望這會有所幫助。