JSLinkを使用してリストビューのアイテムを除外する
質問
私はGUIDを含むリストビューを持っています。ここでは、JSlinkのonprerender関数で行われたREST呼び出しの結果に応じて、一部の項目を除外します。RESTコールは別のリストからGUIDを取得し、それらが現在のリスト内のものと一致した場合は、アイテムをレンダリングして表示します。しかし、そうでなければ、アイテムがまったく表示されたくない、それは削除されるべきです。これは可能ですか?
私はContextInfoを操作しようとしたことが私が望んでいなかったアイテムを削除しましたが、それはエラーを引き起こしました。
では、特定のフィールドの値だけでなく、リストビューから行全体を削除することです。
解決
オプション1.リストビューの行を削除する方法
次の例では、クライアント側のレンダリングを介して行を削除する方法を示しています。
(function () {
function listPreRender(renderCtx) {
var excludeRows = [0,2,3]; //row idexes to be excluded
var rows = renderCtx.ListData.Row; //get current rows
for(var i = excludeRows.length - 1; i >= 0; i--) {
var rowIdx = excludeRows[i]; //get row index to exclude
rows.splice(rowIdx, 1); //delete List View Row
renderCtx.ListData.LastRow = rows.length; //update ListData.LastRow property
}
}
function registerListRenderer()
{
var context = {};
context.Templates = {};
context.OnPreRender = listPreRender;
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(context);
}
ExecuteOrDelayUntilScriptLoaded(registerListRenderer, 'clienttemplates.js');
})();
.
オプション2.リストビューで行を非表示にする方法
(function () {
var excludeRows = [0,2,3];
function renderListItemTemplate(renderCtx) {
if(excludeRows.indexOf(renderCtx.CurrentItemIdx) > -1)
{
return ''; //do not render row
}
return RenderItemTemplate(renderCtx);
}
function registerListRenderer()
{
var context = {};
context.Templates = {};
context.Templates.Item = renderListItemTemplate;
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(context);
}
ExecuteOrDelayUntilScriptLoaded(registerListRenderer, 'clienttemplates.js');
})();
.
(function () {
var excludeRows = [0,2,3];
function renderListItemTemplate(renderCtx) {
if(excludeRows.indexOf(renderCtx.CurrentItemIdx) > -1)
{
return ''; //do not render row
}
return RenderItemTemplate(renderCtx);
}
function registerListRenderer()
{
var context = {};
context.Templates = {};
context.Templates.Item = renderListItemTemplate;
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(context);
}
ExecuteOrDelayUntilScriptLoaded(registerListRenderer, 'clienttemplates.js');
})();
結果
オリジナルリストビュー
後
他のヒント
レンダリング機能にIFステートメントを追加する必要があります。のようなもの
function CustomItem(ctx) {
var ret = '';
if ($.inArray(ctx.CurrentItem.GUID, ArrayOfGUIDs) != -1) {
ret = '<div>' + ctx.CurrentItem.Title + '</div>';
}
return ret;
}
.
この例では、GUIDが存在するかどうかを確認するためにjQuery関数を使用しましたが、jQueryがない場合は代替比較を使用しています。
所属していません sharepoint.stackexchange