2017-08-16 4 views
0

Ich versuche, JSLink zu verwenden ..finally .. und ich habe einige Probleme, die ich nicht scheinen kann, geradeaus zu richten. Für mein erstes Abenteuer am Kaninchenloch wählte ich etwas sehr Einfaches, um es als Proof of Concept zu verwenden. Also habe ich ein Tutorial gesucht und ein einfaches Skript entwickelt, um ein Feld um das Titelfeld jedes Eintrags zu zeichnen und den Text zu formatieren. Ich kann das nicht zur Arbeit bringen. Gibt es eine Chance, dass Sie sich diesen Code für mich ansehen können? Ich habe die folgenden Token in der JSLink-Box verwendet.Mein JSLink-Skript funktioniert nicht

~ Sitecollection/site/Ordner/Ordner/file.js

Und

~ site/Ordner/Ordner/file.js

Die JS-Datei an derselben Stelle gespeichert sind, wie das ListenansichtswebPart, das ich versuche zu ändern. Die Liste hat nur die Standardspalte "Titel".

(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

Was sagt deine Konsole ?? –

+0

Ich benutze dafür immer die siteassets Bibliothek. Kannst du sicherstellen, dass es auf dieser Seite keinen anderen jslink gibt? Weil zwei jslink-Skripte nicht gleichzeitig auf einer Seite existieren können. – Sascha

Antwort

0

Es sieht aus, als ob Sie versuchen, den Kontext (CTX) Element selbst außer Kraft zu setzen, wo man tatsächlich nur das Listenfeld und die Listenansicht außer Kraft setzen möchten, in dem das Feld angezeigt wird. Sinn ergeben?

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

Dann, wenn der JSLink läuft der Renderer für das Titel-Feld in der Listenansicht aussieht, und wendet Ihre overrideTemplate Funktion:

Erstens overrideContext.Templates.Item zu overrideContext.Templates.Fields ändern.

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

In Bezug auf mehrere JSLinks auf einer Sharepoint-Seite ausgeführt wird, ist es durchaus möglich, mehrere JSLink Skripte auszuführen, werden sie durch das Rohr einfach getrennt werden müssen, ‚|‘ Symbol. Ich benutze SharePoint Online sehr und sehe die folgende Formatierung die ganze Zeit funktioniert (sorry Sascha!).

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

Sie können so viele Skripte gleichzeitig ausführen, wie Sie möchten, trennen Sie sie einfach mit der Pipe. Ich habe das auch vor Ort gesehen, aber vielleicht möchtest du '~ sites' für '~ sitecollection' auslagern und sicherstellen, dass die js-Dateien, auf die du zugreifst, auf der obersten Site in der Websitesammlung sind, wenn du das tust!

Ich habe festgestellt, wenn mehrere JSLinks auf einer Liste oder Seite ausgeführt werden, weil sie alle Client Side Rendering ausführen, zu viele werden Ihre Seite verlangsamen. In diesem Fall sollten Sie in Betracht ziehen, sie zu einem JSLink-Skript zusammenzufassen, sodass der Server nur eine Datei aufrufen muss, um zum gesamten Rendering für die Liste zurückzukehren.

Hoffe, das hilft.