return 如何将 <<< 元素添加到 eureka 中的表单而不是页面中的表单?

how do a return a <<< element to a form in eureka not in the page?

我喜欢尤里卡使用的标记。

但是有一个问题 - 我想知道如何解决这个问题

考虑

 form +++ Section()

        <<< TextRow(){ row in
            row.title = "Username"
            row.tag = "username"
            row.placeholder = "Login Email"
        }

        <<< PasswordRow(){ row in
            row.title = "Password"
            row.tag = "password"
            row.placeholder = "Password"
        }

现在假设您必须有一个 returns 对象(我在 json 元数据中循环)..您如何处理它?

(伪代码 - 考虑这 2 个采样代码执行完全相同的工作并且需要完全相同)

 let someFormEngine = someEurekaFormEngine() //doesn't exist yet this is the question
 let nodes = GetJsonNodes() //returns two items in an array 

EG:nodes = [(type: 'TextRow', name: 'username'),(type: 'PasswordRow', name: 'password')]

 form +++ Section()

        for node in nodes {
            if (node.type=='TextRow'){
                 someFormEngine.DisplayTextRow(node.name)
            }
            if (node.type=='PasswordRow'){
                 someFormEngine.DisplayPasswordRow(node.name)
            }
        }

因此,当然可以动态地和以编程方式创建一个表单,其中包含由配置文件驱动的行和部分。我自己在我创建的应用程序中这样做。

但是,您将不得不创建自己的 json meta-data 格式,并使用 switch 语句动态添加特定的行类型并正确配置它们。 Eureka 没有机制 "serializes" 表单的配置 meta-data 存储在 json 中,然后从 json meta-data 中反序列化它。但是您可以像我一样创建自己的 "deserializer",循环遍历一些 json meta-data 创建行和部分并配置它们的必要参数。

改编您自己的示例代码:

let section = Section()
form +++ section
for node in nodes {
   switch node.type { 
   case 'TextRow':
       section <<< makeTextRow(node: node)
   case 'PasswordRow':
       section <<< makePasswordRow(node: node)
   :
   :
   default:
}
:
:
func makeTextRow(node:Node) -> TextRow {
    return TextRow() {
        [=10=].tag = node.tag
        [=10=].title = node.title
        [=10=].placeholder = node.placeholder
        :
        :
    }
}

当然,你可以只创建一个 makeRow(node:Node) 函数并将 switch 语句移动到那个主函数中,然后循环中只有 section <<< makeRow(node: node)。您可以使用许多可能的设计模式。

另请注意,您可以使用 .cellUpdate { cell, row in 根据节点 class 中的其他元数据进一步动态自定义动态行。例如,在我的应用程序中,我定义了一个动态行类型 "Hexadecimal"; Eureka 目前没有 HexadecimalRow;但我有各种自定义键盘,其中之一是十六进制键盘,我刚刚将其分配给了 TextRow。

或者您可以根据节点 class 中的元数据再次分配不同的规则。实际上,您可以创建 Eureka 中当前不存在的各种动态字段作为特定行类型。

我还使用编程循环创建了一系列 TextAreaRow,允许 end-user 以各种语言输入其组织的名称。事先不知道这些语言的数量和顺序,因此使用循环而不是 "waterfall" 固定数量的 TextAreaRows。

当然,尽管所有 Eureka 示例都显示了简单的 "waterfall" 表单定义,但使用循环基于数据库或 json 内容创建动态表单行和部分非常有用。