我需要使单击列表项标题的操作打开编辑表单,而不是查看表单。为此,我选择使用 CSR。

我有以下代码:

(function () {
    var statusFieldCtx = {};

    statusFieldCtx.Templates = {};
    statusFieldCtx.Templates.Fields = {
        "Title": {"View": DataFieldViewTemplate},

    };

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(statusFieldCtx);
})();

function DataFieldViewTemplate(ctx) {       
    var data = ctx.CurrentItem.Title;
    console.log(data);      
}

但我在浏览器控制台中看不到任何内容。如果我更改代码,这可以工作,但标题列不存在。

这是我编辑的代码:

(function () {
    var statusFieldCtx = {};

    statusFieldCtx.Templates = {};
    statusFieldCtx.Templates.Fields = {
        "dt_x0020_proximo_x0020_contato": {"View": DataFieldViewTemplate},

    };

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(statusFieldCtx);
})();

function DataFieldViewTemplate(ctx) {       
    var data = ctx;
    console.log(data);      
}

我的问题是:我的代码有什么错误吗?我可以用不同的方式做我想做的事吗?

有帮助吗?

解决方案

看来你正在尝试定制 LinkTitle 场地 - Title (linked to item with edit menu), ,但不是一个 Title 场地。

下面的例子演示了如何渲染 LinkTitle 将 Url 设置为“编辑表单”而不是“显示表单”:

(function () {


   function titleRenderer(renderCtx) {
       var item = ctx.CurrentItem;
       return '<a class="ms-listlink" onfocus="OnLink(this)" href="' + renderCtx.editFormUrl + '" onclick="EditLink2(this,' + renderCtx.ListTemplateType + ');return false;" target="_self">' + item.Title + '</a>';  
    }


    function registerRenderer()
    {
      var ctxTitleField = {};
      ctxTitleField.Templates = {};
      ctxTitleField.Templates.Fields = {
        "LinkTitle": {
            "View": titleRenderer
        }
      };

      SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctxTitleField);
    } 
    ExecuteOrDelayUntilScriptLoaded(registerRenderer, 'clienttemplates.js');

})();

其他提示

是您尝试将此应用于的视图中的标题字段?实际存在标题字段的许多变体(例如,使用(...)菜单),因此请确保包含标题的内部名称的变型。

或使用您从CTX.CurrentItem中获得的信息在第二个代码片段中,检查是否没有其他属性,您可以使用

许可以下: CC-BY-SA归因
scroll top