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 内容创建动态表单行和部分非常有用。
我喜欢尤里卡使用的标记。
但是有一个问题 - 我想知道如何解决这个问题
考虑
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 内容创建动态表单行和部分非常有用。