Я использую Aurelia для создания динамической формы на основе json. Форма генерации из JSON, как в следующем:Форма схемы с использованием Aurelia
Schema = [{
'key': 'Name',
'display': 'Name',
'type': 'text',
'placeholder': 'Name',
'required': true
},
{
'key': 'IsSubscribed',
'display': 'Subscribed to newsletter?',
'type': 'checkbox',
'placeholder': null,
'required': false
}];
модель заполнить форму можно через службу Web API. Таким образом, мне удалось использовать следующий шаблон.
<template>
<section class="au-animate">
<h2>Edit Form</h2>
<form class="form-group">
<div repeat.for="item of Schema" class="form-group">
<label if.bind="item.type === 'text' || item.type === 'checkbox'" class="control-label" for.bind="item.key">${item.display}
<input class="form-control" id.bind="item.key" placeholder.bind="item.placeholder" type.bind="item.type" value.bind="Model[item.key]" />
</label>
<label if.bind="item.type === 'textarea'">${item.display}
<textarea placeholder.bind="item.placeholder" value.bind="Model[item.key]></textarea>
</label>
...
</div>
</form>
</section>
</template>
Теперь я столкнулся с трудностями, когда Модель содержит другой объект в качестве свойства. Например, для свойства Address я хотел бы ввести поле для City.
Следовательно, item.key = "Address.City"
.
Я могу связать с (1) Model.Address.City или (2) Model ['Address'] ['City'], которые невозможны при формировании формы во время выполнения. Я хотел бы использовать что-то вроде (3) Model ['Address.City'], чтобы я мог использовать Model [item.key] для привязки. Есть ли простой синтаксис для достижения этого?
Пример подобного применения в угловом Js является Angular Schema Form
Заранее спасибо.
Спасибо, Джереми. Он работал для одного поля в форме. Но когда я использую то же самое для более чем одного поля в форме, я столкнулся с проблемой. Для каждого такого поля конкатенация запоминает предыдущие вызовы, например, сначала Model.Address.City, второй Model.Address.City.Address.State. Кроме того, unbind никогда не срабатывает. Я не знаю, является ли это правильным поведением или нет, поскольку я очень новичок в Aurelia. Но похоже, что очистка не происходит. Я использую [email protected] –
Извините, что я обновил суть, связанную с проблемой исправлением. Я также открыл проблему в привязке aurelia, которая упростит сделать что-то вроде этого: https://github.com/aurelia/binding/issues/344 Как только усовершенствование Aurelia будет реализовано, я обновлю эту проблему , Дайте мне знать, если вы столкнетесь с дальнейшими проблемами. –
Я видел вашу модификацию, но я не мог использовать _model & dynamicExpression: 'address.address1'_, поскольку значение address.address1 происходит от другой переменной (скажем, клавиши). И по этой причине проблема возникла, в противном случае я мог бы использовать model.address.address1 напрямую для привязки к вводу. –