2

版本 4eventRender并且很容易渲染或没有事件,因为您所要做的就是返回null

使用版本 5(目前在 beta 4),该事件被替换为eventContentandeventClassNames但我正在努力复制相同的想法,因此我可以轻松地在时间线视图中显示有和没有事件的资源

从升级指南中它说:

eventContent- 如果你通过 eventRender 注入 DOM 内容。但是,您不能通过返回 false 来取消渲染。相反,display:'none'在事件输入上附加了一个属性。

但如果在那种情况下我这样做,它仍然会显示该事件:

eventContent: (arg) => {
   arg.event.display = 'none'
}

在此处输入图像描述

我错过了什么?我们应该返回/设置什么以便不再显示事件?


我也试过

eventContent: (arg) => {
   return { display: 'none' }
}

但它所做的只是隐藏事件本身的内容,不删除事件,我最终得到了事件“框架”

在此处输入图像描述

4

4 回答 4

3

虽然这里讨论了一种可能的解决方案,但您也可以利用新eventClassNames方法:

eventClassNames(args) {
   return args.extendedProps.visible ? "" : "event-hidden";
}

然后定义一个 CSS 规则

.event-hidden {
  display: none;
}
于 2020-07-04T00:10:01.910 回答
0

我有同样的问题。我能够通过更改“显示”属性来隐藏事件本身(框)。

eventContent: function(info) {
  var event = info.event;
  event.setProp('display', 'none');
},
于 2020-07-23T23:48:06.763 回答
0

升级指南现在提到:

eventContent - 如果您通过 eventRender 注入 DOM 内容。但是,您不能通过返回 false 来取消渲染。相反,请确保您的事件对象在 eventContent 执行之前将其显示属性设置为“无”。您可以通过设置 event.setProp('display', 'none') 来动态执行此操作。

所以两个部分:

  • 设置属性使用完成event.setProp('display','none')
    event.display = none将不起作用
  • 这需要在之前完成eventContent,例如eventDidMount
eventDidMount: function(info) {
  if (...) {
    info.event.setProp('display','none')
  }
}
于 2020-07-07T18:19:08.460 回答
0

您也可以使用新batchRendering功能来执行此操作,例如。

vm.rerenderEvents = ->
    vm.calendar.batchRendering ->
      vm.calendar
        .getEvents()
        .forEach (event) ->
          visible = checkFilters event

          if not visible
            event.setProp 'display', 'none'
          else
            event.setProp 'display', 'auto'

          return
        return
      return
于 2020-07-08T15:34:30.317 回答