Frage

Ich habe einen benutzerdefinierten Feldtyp für SharePoint 2010/2007, aber nachdem ich nach SharePoint 2013 migriert wurde, traf ich ein Problem.
Hier ist das, was ich für "RenderPattern" in FLDTypes_MYFIELD.XML definiert habe. generasacodicetagpre.

myFun () ist in myjs.js definiert, also wenn pic.png geladen wird, wird die Funktion ausgeführt. Es funktioniert gut in der Benutzererfahrung 2010/2007 und 2010 in SharePoint 2013.
Im Jahr 2013 unter 2013 Benutzererfahrung, wenn ich die Liste, die MyField enthält, sehe, wird der Fehler angezeigt: generasacodicetagpre.

Der Grund ist offensichtlich, myjs.js wird nicht zur Seite hinzugefügt. (Der JS-Link ist korrekt, kopieren Sie den Link zu Adressleiste und den Browser kann es anzeigen)
Also, meine Frage ist: Warum ist myjs.js nicht registriert?
Irgendwelche Ideen? Danke im Voraus.

update:
Es funktioniert nicht in "ListView" -Seite, sondern funktioniert in "DisplayForm" -Seite. "Camlrenderinging" ist auf TRUE gesetzt. Wenn Sie unter "ListView" -Seite das Feld mit dem Webentwickler-Tool überprüfen, überprüfen Sie das HTML-Markup in der IS: generasacodicetagpre.

verbietet SharePoint 2013 den JS zum Laden?

War es hilfreich?

Lösung

Nach dem Debuggen habe ich festgestellt, dass es eine Variable namens "wpq2listdata" gibt, die den Listendateninhalt speichert, ist das Format: generasacodicetagpre.

}

achten Sie auf "Myfield", es hat den Inhalt, der gerendert werden sollte.
Auf der Seite wird an einem Ort "wpq2listdata" verwendet: generasacodicetagpre.

dann wird dann "ctx" an die Funktion "RenderlistView" übergeben, die für das Rendern der Listenansicht verantwortlich ist. Diese Funktion ist in "clienttemplates.js" definiert. Wenn Sie eintauchen, werden Sie feststellen, dass es in dieser Funktion eine weitere Funktion namens "spclientrenderer.render" aufgerufen wird. Es erzeugt in dieser Funktion den gesamten HTML-Inhalt für die Listendaten und fügt ihn an einen TD (vielleicht div) als ein innerhtml. generasacodicetagpre.

Achten Sie auf "NODE.INNERHTML= Ergebnis", da wenn einige Stringinhalte in ein Element als InnerHTML eingesetzt sind, und der Inhalt enthält JavaScript-Code, wird der JS-Code nicht ausgeführt. Und deshalb wird "myjs.js" nicht zur Seite hinzugefügt! Ich denke, dies ist eine der großen Unterschiede auf der Rendering-Listenansicht im Jahr 2010 und 2013, 2010 wird die Listendaten HTML direkt an Seite ausgegeben, während es 2013 dynamisch an Seite eingesetzt ist.

Lösung:
Eigentlich gibt es noch einen Platz, der JS-Code enthält und den Code ausführen kann. Es ist in IMG "onload". Warum registrieren wir unsere JS-Datei nicht hier? Und nachdem myjs.js geladen ist, lass es myFun () anrufen! generasacodicetagpre.

und für eine bessere Leistung müssen wir myjs.js nicht für jede Zeile registrieren, wir sollten prüfen, ob er zuerst existiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top