0

我正在寻找一种在 Sitefinty 的后端屏幕上有条件地显示模块字段的方法。

例如,假设我通过模块生成器创建了一个模块 - 我有两个字段:一个复选框和一个文本字段。

我希望文本字段仅在内容编辑器选中复选框字段后才显示给他们。理想情况下,该复选框可以通过内容输入过程在现场隐藏/显示一些字段。

  • 有没有一种简单、可维护的方法来解决这个问题?
  • 目前使用的是 10.2 版,很高兴知道如何通过新旧 UI 来实现这一点。
  • 希望有一个我不知道的高级设置,但也
    愿意采用 JS 方法。

谢谢!

4

1 回答 1

2

经过一番挖掘,我已经找到了一个可行的解决方案。以下是我的处理方式:

注意:[module] 和 [section] 假定您的自定义模块名称和部分。如果您未在其中设置部分,backend screens and tweaks则所有字段都将位于MainSection

第 1 步- 在高级设置中向模块添加自定义脚本。

假设这是一个动态模块......

在您的项目中创建一个 JS 文件,并通过以下方式在高级设置中引用它:

Advanced settings > Dynamic Modules > Controls > [module] > Views > [Module]View > Scripts

单击Create New 并将脚本位置指向您创建的 JS 文件。


第 2 步- 将自定义类添加到您的字段

在高级设置中停留在原处并导航到您创建的字段。例如:

Advanced settings > Dynamic Modules > Controls > [module] > Sections > [Section] > Fields > [Field]

在此页面上向下滚动CSS Class到该字段并将自定义 CSS 类添加到该字段


第 3 步- 添加您的自定义 Javascript

Sitefinity 使用 jQuery,所以我使用它并根据类名设置了一些非常基本的 JS:

$(document).ready(function(){
    $('.myTextBox').hide();

    $('.myCheckbox input').on('change', function(){
        var $this = $(this),
            textBox = $('.myTextBox');

        $this.is(':checked') ? textBox.show() : textBox.hide();
    })
});

注意:自定义 CSS 类被应用到实际元素的父包装器

现在,当内容编辑器向模块添加新内容项时,检查该特定复选框将显示和隐藏自定义文本框。

除了这个过程似乎有点过头之外,还有其他一些问题:

  • 您必须在编辑和插入视图上设置对自定义脚本的调用。
  • 它不考虑任何验证。
  • 随着 Sitefinity 获得后端 UI 升级,长期可持续性值得怀疑。

如果有更好/更简单的方法来解决这个问题,我会暂时不回答这个问题。

于 2018-03-08T06:21:14.080 回答