[英]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"
}
現在想象一下你必須有一個返回那里的對象(我在 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 元數據格式,並使用 switch 語句動態添加特定行類型並正確配置它們。 Eureka 沒有“序列化”表單的配置元數據以存儲在 json 中的機制,然后從該 json 元數據中反序列化它。 但是你可以像我一樣創建你自己的“反序列化器”,循環一些 json 元數據來創建行和節並配置它們的必要參數。
要調整您自己的示例代碼:
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() {
$0.tag = node.tag
$0.title = node.title
$0.placeholder = node.placeholder
:
:
}
}
當然,您可以創建一個 makeRow(node:Node) 函數並將 switch 語句移動到該主函數中,然后循環中只有section <<< makeRow(node: node)
。 您可以使用許多可能的設計模式。
.cellUpdate { cell, row in
請注意,您可以使用.cellUpdate { cell, row in
進一步根據 Node 類中的其他元數據動態自定義動態行。 例如,在我的應用程序中,我定義了一個動態行類型“十六進制”; Eureka 目前沒有 HexadecimalRow; 但我有各種自定義鍵盤,其中之一是我剛剛分配給 TextRow 的十六進制小鍵盤。
或者,您可以根據 Node 類中的元數據再次分配不同的規則。 實際上,您可以創建各種當前在 Eureka 中作為特定行類型不存在的動態字段。
我還使用程序循環創建了一系列的 TextAreaRow,允許最終用戶以各種語言輸入其組織的名稱。 這些語言的數量和順序事先未知,因此使用循環而不是固定數量的 TextAreaRows 的“瀑布”。
所以當然,盡管所有 Eureka 示例都顯示了簡單的“瀑布”表單定義,但使用循環創建基於數據庫或 json 內容的動態表單行和部分非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.