1

我正在尝试在列表项中使用 Inspector 的when参数。在这种特殊情况下,我想在用户使用切换按钮时隐藏项目的正文文本字段:

inputs: {
  mylist: {
    type: 'list',
    label: 'List of items',
    item: {
      type: 'object',
      properties: {
        attrs: {
          text: {
            title: {
              type: 'text',
              label: 'Title',
              index: 1
            },
            body: {
              type: 'textarea',
              label: 'Body',
              index: 2,
              when: { eq: {'????': false} } // what path should be used here?
            }
          },
          toggles: {
            toggleBody: {
              defaultValue: false,
              type: 'text',
              label: 'Hide body',
              index: 3
            },
          }
        } // attrs
      } // properties
    } // item
  }
}

我已通过以下方式验证renderFieldContent

renderFieldContent: function(options, path, value) {
  if(path.endsWith('/attrs/text/body')){
    console.log(path);
  }
} // 1 item in the list outputs: mylist/0/attrs/toggles/toggleBody

列表项路径遵循项号`mylist/${i}/attrs/toggles/toggleBody`所在的模式${i}...

我试图mylist/0/attrs/toggles/toggleBody在表达式中引用(所以它总是会引用第一项),但这似乎也不起作用......有没有办法引用列表项属性的路径?

4

1 回答 1

0

从 Rappid v3.2,可以在路径中放置通配符。

'mylist/${index}/attrs/toggles/toggleBody'

通配符${index}将被动态替换为when正在评估子句的项目的实际索引。

inputs: {
    mylist: {
        type: 'list',
        label: 'List of items',
        item: {
            type: 'object',
            properties: {
                attrs: {
                    text: {
                        title: {
                            type: 'text',
                            label: 'Title',
                            index: 1
                        },
                        body: {
                            type: 'textarea',
                            label: 'Body',
                            index: 2,
                            when: {
                                eq: {
                                    'mylist/${index}/attrs/toggles/toggleBody': false
                                },
                                // otherwise: { unset: true }
                                // Uncomment above to clear the body text
                                // from the model when the body is hidden
                            }
                        }
                    },
                    toggles: {
                        toggleBody: {
                            defaultValue: false,
                            // Changed to built-in toggle
                            type: 'toggle',
                            label: 'Hide body',
                            index: 3
                        }
                    }
                }
            }
        }
    }
}
于 2021-09-27T16:36:59.743 回答