Резервный вариант рендеринга CSR списка SharePoint по умолчанию

Я искал в Интернете пару хороших примеров, но в основном связанных с рендерингом метода рендеринга по умолчанию для форм.

В моем случае у меня есть страница с одним и тем же списком в двух веб-частях с разными представлениями, для одного я хочу применить CSR, для другого я просто хочу иметь рендеринг по умолчанию. некоторые люди упомянули, что вы можете проверить идентификатор представления и вызвать RenderFieldValueDefault (ctx), но это, похоже, не работает, результат отсутствует.

Вот как я пытался:

 SP.SOD.executeFunc('clienttemplates.js', 'SPClientTemplates', function () {
  SPClientTemplates.TemplateManager.RegisterTemplateOverrides({
    Templates: {
      Fields: {
        AnyFieldInternalName: {
          View: function (ctx) {
            if (ctx.listName !== 'some_unique_id') {
              return RenderFieldValueDefault(ctx);
            }
            return 'haha';
          },
        },
      },
    },
    OnPreRender: __customPreRender,
    OnPostRender: __customPostRender,
  });
});

Кто-нибудь знает, как этого добиться без необходимости настраивать «поля по умолчанию»?

Спасибо,


person Ricardo Silva    schedule 09.05.2020    source источник


Ответы (2)


Для тех, кому интересно, я смог сделать это с помощью следующего кода из clienttemplates.debug.js

/**
 * default render method taken from clienttemplates.debug.js
 * @param {Object} root the global root, in this case this is bound to window.
 * @param {Object} anCtx current context of the list
 * @param {Object} aField current field
 * @param {Object} anItem current item
 * @param {Object} aListSchema current list schema
 */
var DefaultRenderFallBack = (function (root, anCtx, aField, anItem, aListSchema) {
  var fieldRenderMap = {
    Computed: new root.ComputedFieldRenderer(aField.Name),
    Attachments: new root.AttachmentFieldRenderer(aField.Name),
    User: new root.UserFieldRenderer(aField.Name),
    UserMulti: new root.UserFieldRenderer(aField.Name),
    URL: new root.UrlFieldRenderer(aField.Name),
    Note: new root.NoteFieldRenderer(aField.Name),
    Recurrence: new root.RecurrenceFieldRenderer(aField.Name),
    CrossProjectLink: new root.ProjectLinkFieldRenderer(aField.Name),
    AllDayEvent: new root.AllDayEventFieldRenderer(aField.Name),
    Number: new root.NumberFieldRenderer(aField.Name),
    BusinessData: new root.BusinessDataFieldRenderer(aField.Name),
    Currency: new root.NumberFieldRenderer(aField.Name),
    DateTime: new root.DateTimeFieldRenderer(aField.Name),
    Text: new root.TextFieldRenderer(aField.Name),
    Lookup: new root.LookupFieldRenderer(aField.Name),
    LookupMulti: new root.LookupFieldRenderer(aField.Name),
    WorkflowStatus: new root.RawFieldRenderer(aField.Name),
  };

  if (!(root.OffSwitch == null || root.OffSwitch.IsActive('39A8E192-9EFC-4922-9FD8-343D685E163C'))) {
    fieldRenderMap.Location = new root.LocationFieldRenderer(aField.Name);
  }
  // eslint-disable-next-line eqeqeq
  if (aField.XSLRender == '1') {
    /* eslint-disable no-param-reassign */
    aField.FieldRenderer = new root.RawFieldRenderer(aField.Name);
  } else {
    aField.FieldRenderer = fieldRenderMap[aField.FieldType];
    if (aField.FieldRenderer == null) { aField.FieldRenderer = fieldRenderMap[aField.Type]; }
  }
  if (aField.FieldRenderer == null) { aField.FieldRenderer = new root.FieldRenderer(aField.Name); }
  /* eslint-enable no-param-reassign */

  return aField.FieldRenderer.RenderField(anCtx, aField, anItem, aListSchema);
}.bind(null, window));

Итак, с этим я могу сделать что-то вроде

 SP.SOD.executeFunc('clienttemplates.js', 'SPClientTemplates', function () {
  SPClientTemplates.TemplateManager.RegisterTemplateOverrides({
    Templates: {
      Fields: {
        AnyFieldInternalName: {
          View: function (ctx, field, item, schema) {
            if (ctx.listName !== 'some_unique_id') {
              return DefaultRenderFallBack (ctx, field, item, schema);
            }
            return 'haha';
          },
        },
      },
    },
    OnPreRender: __customPreRender,
    OnPostRender: __customPostRender,
  });
});
person Ricardo Silva    schedule 10.05.2020

Вы можете использовать ViewStyle для установки целевого представления списка.

Вы можете изменить целевой вид на другой стиль, чтобы его можно было отобразить.

person Baker_Kong    schedule 11.05.2020