Как вернуть элемент <<< в форму в eureka не на странице? - PullRequest
0 голосов
/ 17 апреля 2019

Мне нравится разметка, которую использует eureka.

Но есть проблема - и мне интересно, как мне ее обойти

Рассмотрим

 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) ... как вы поступите?

(Псевдокод - считайте, что эти две выборки кода выполняют ТОЧНУЮ работу и должны быть идентичными)

 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)
            }
        }

1 Ответ

1 голос
/ 15 мая 2019

Так что, безусловно, можно динамически и программно создать форму, в которой есть строки и разделы, управляемые файлом конфигурации.Я делаю это сам в приложении, которое создал.

Однако вам придется создать свой собственный формат метаданных 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 для дальнейшей динамической настройки динамической строки на основе дополнительных метаданных в вашем классе Node.Например, в моем приложении я определил динамический тип строки «Шестнадцатеричный»;Эврика в настоящее время не имеет HexadecimalRow;но у меня есть различные пользовательские клавиатуры, одна из которых - шестнадцатеричная клавиатура, которую я только что назначил TextRow.

Или вы можете снова назначить другие правила на основе метаданных в вашем классе Node.На самом деле вы можете создавать все виды динамических полей, которые в настоящее время не существуют как определенные типы строк в Eureka.

Я также использовал программные циклы для создания серии, скажем, TextAreaRow, которая позволяет конечному пользователю вводить имяих организации на разных языках.Количество и порядок этих языков заранее неизвестны, поэтому используется цикл, а не «водопад» с фиксированным количеством TextAreaRows.

Так что, конечно, хотя во всех примерах Eureka показан простой «водопад»Определения форм, использование циклов для создания динамических строк и разделов форм на основе содержимого базы данных или json очень полезно.

...