В зависимости от типа данных поля в базе данных, формируется HTML шаблон для редактирования этого поля. Так, например, если у поля тип дата - то соответствующим шаблоном будет выпадающий календарь.
Для удобства использования система предлагает 2 шаблона для редактирования модели и ссылок с ней связанных
Copy <!-- ko template : {
name : 'small_form_with_header' ,
data : {Name : 'Основные параметры' , Fields : MDocumentEditor .DocFields , Model : Document}
} --><!-- / ko -->
Copy < script id = "small_form_with_header" type = "text/html" >
< div >
<!-- ko if:$data.Name && $data.Name.length -->
< h3 class = "row header smaller lighter blue" data-bind = 'lang:$data.Name' ></ h3 >
<!-- /ko -->
<!-- ko with:$data.Model -->
< div class = "profile-user-info profile-user-info-striped" style = 'margin-bottom: 3px;position: relative;' >
<!-- ko if:console.log($parent) --><!-- /ko -->
<!-- ko if:$parent.Remove -->
< div class = "profile-info-toolbuttons pull-right action-buttons noselect" >
< a class = "white" data-bind = "title:'Удалить',click:$parent.Remove" >
< span >< i class = "fa fa-icon fa-times bigger-130" ></ i ></ span >
</ a >
</ div >
<!-- /ko -->
<!-- ko foreach: $parent.Fields -->
< div class = "profile-info-row" >
< div class = "profile-info-name" data-bind = "model:$parent.modelname,lang:$data" ></ div >
< div class = "profile-info-value" >
<!-- ko template: $parent.Template($data) --><!-- /ko -->
</ div >
</ div >
<!-- /ko -->
</ div >
<!-- /ko -->
</ div >
</ script >
Copy <!-- ko template : {
name : 'edit_links' ,
data : {Name : 'Выбор заголовков' , MainModel : 'doc' , LinkModel : 'docheader' , Model : Document}
} --><!-- / ko -->
Copy < script id = "edit_links" type = "text/html" >
< div class = "dd" >
<!-- ko if:$data.Name && $data.Name.length -->
< h3 class = "row header smaller lighter blue" data-bind = 'lang:$data.Name' ></ h3 >
<!-- /ko -->
<!-- ko with:$data.Model -->
<!-- ko if:!$data['Link_'+$parent.LinkModel]().length -->
< div class = 'emptyLinks' >Ссылок - нет</ div >
<!-- /ko -->
< ol class = "dd-list" data-bind = "foreach:$data['Link_'+$parent.LinkModel]" >
< li class = "dd-item" data-bind = "attr:{'data-id':$index()}" >
< div class = "profile-user-info profile-user-info-striped " style = 'margin-bottom: 3px;' >
< div class = 'profile-info-toolbuttons pull-right action-buttons noselect' >
<a class='white' data-bind="title:'Удалить',click:ModelEdit.RemoveLink.bind($parent,$parents[1].LinkModel,$data)">
< span >< i class = "fa fa-icon fa-times bigger-130" ></ i ></ span >
</ a >
< a class = 'white' data-bind = "title:'Изменить',click:$data.IsEdit.bind(null,!$data.IsEdit())" >
< span >< i class = "fa fa-icon fa-pencil bigger-130" ></ i ></ span >
</ a >
</ div >
<!-- ko foreach: LinkEditorHelper.FilterEditFields($parents[1].MainModel,$parents[1].LinkModel,$parents[1].FieldParams) -->
< div class = "profile-info-row" data-bind = "css:{'not-edited':!$parent.IsEdit()}" >
< div class = "profile-info-name" data-bind = "model:$parent.modelname,lang:$data" ></ div >
< div class = "profile-info-value" >
<!-- ko if:$parent.IsEdit() -->
<!-- ko template: $parent.Template($data) --><!-- /ko -->
<!-- /ko -->
<!-- ko ifnot:$parent.IsEdit() -->
<!-- ko if:$parent.Types[$data].Type=='Boolean' -->
< div class = "checkbox" >
<input class="ace ace-checkbox" type="checkbox" disabled data-bind="checked: $parent[$data]">
< span class = "lbl" ></ span >
</ div >
<!-- /ko -->
<!-- ko ifnot:$parent.Types[$data].Type=='Boolean' || $parent.Types[$data].Type=="Select" -->
< span data-bind = 'text:$parent[$data]' ></ span >
<!-- /ko -->
<!-- ko if:$parent.Types[$data].Type=="Select" -->
<!-- ko template:{name:'catalogue_withcode',data:{model:$parent.Types[$data].Model,id:$parent[$data]()}} --><!-- /ko -->
<!-- /ko -->
<!-- /ko -->
</ div >
</ div >
<!-- /ko -->
</ div >
</ li >
</ ol >
<a class='addLinkModel' data-bind="click:ModelEdit.AddLink.bind($parent.Model,$parent.LinkModel)">Добавить ссылку</a>
<!-- /ko -->
</ div >
</ script >
В большинстве случаев этих двух шаблонов должно хватать для составления форм редактирования. В крайнем случае ничто не мешает сделать произвольную форму на основе информации о полях модели и шаблонов их редактирования (см разделМодели )