j-Editable
Този компонент може да редактира всички елементи с клас editable. Той работи с стойностите на data-bind или динамика.
Конфигуриране:
autofocus{Boolean} се фокусира върху първия елемент (предварително:false)validate{Boolean} може да деактивира валидацията (дефалтиран:true)disabled{Boolean} може да деактивира редактирането (това добавя класа наui-editable-disabledиui-editable-enabled), по подразбиране:falsechanged{String} опция, връзка към метод или път --> тя ще съдържа обекта с променени стойности самоenter{String} опция, връзка към методmethod(path, value, el), методът се изпълнява, ако потребителят натиснеENTERescape{String} опция, връзка към методmethod(path, value, el), методът се изпълнява, ако потребителят натиснеESCcan{String} опционално, връзката към методаmethod(opt, el)трябва да върнеboolean, което означаваcan edit?error{String} опционално, връзката към методаmethod(el, isInvalid, meta)се оценява, когато елементът е невалиден и обратното.- NEW
class {String}опционално, добавя име за клас във формуляраui-editable-CLASS(предварително:default)
Атрибутът на data-editable описва поведението:
path{String} relative path към собствеността (може да бъде наследен отdata-bindавтоматично)required{Boolean} опционално, позволява "необходимо" (предварително:false)type{String} опционално, може да бъдеstring(предварително),date,number,boolean,emailилиhtmlNEWtagscan{String} опция, пътят къмfunction(opt, el)трябва да се върне наboolean, което означава, чеcan edit?save{String} опция, път къмfunction(opt, accepted(boolean)),acceptedфункция трябва да бъде оцененаformat{String} опционален, формат заdate, подразбиране:yyyy-MM-dddirsource{String} опционален, път към източник на данниdircustom{String/Boolean} опция, може да съдържа път къмfunction(val, next(new_val))или може да бъдеBoolean.dirrender{String} опция, пътят къмfunction(item, text)(може да се върне HTML заj-Directory), тази функция може да повлияе на списъка с елементи вj-Directorydirminwidth{No} опционално, минимална ширина заj-Directory, подразбиране:200dirmaxwidth{No} опция, максимална ширина заj-Directorydirplaceholder{String} опционално, място заj-Directorydirempty{String} опционално, добавя празно поле заj-Directorydirkey{String} опционално, ключово име за четене наtextвdirsource(предварително:name)dirvalue{String} опционално, ключово име за четене наvalueвdirsource(предварително:id)dirsearch{Boolean} опционално, може да деактивира търсенето наj-Directoryautosource{String} пътят към функциятаsearchвautocomplete,function(search, render(arr))autovalue{String} свойствен път за стойността вautosourcemaxlengthМаксът еminvalue{No.} минимална стойност за тип номер (предварително:undefined)maxvalue{No.} максималната стойност за тип номер (предварително:undefined)rebindАко еtrueвръзкатаdata-bindВ този случай (по подразбиране)0)validate{String} опция, условие за валидиране на стойността, може да съдържа връзка къмfunction(value)или!!value.match(/[a-z]+/)multiline{Boolean} опционално, позволява многолинен + приложни класeditable-multiline(inline-block+width:100%) когато е редактиран (предварително:false)raw{Boolean} опционално, когатоtrueтогава текущото HTML съдържание ще бъде като местонахождение, ако стойността еnullable(предварително:true)accept{String} опция, условие за приемане на стойност, може да съдържа връзка къмfunction(value)или!!value.match(/[a-z]+/)е подобен наvalidateempty{String} опция, позволява празна стойност и може да съдържа празна етикета или1илиtrueза автоrebindна връзкатаinvalid{String} опционално, връзката към методаmethod(el, isInvalid, meta)се оценява, когато елементът е невалиден и обратното.
Методи:
- NEW:
component.changed()връща обект с променени данни
Добре е да се знае:
- Ако потребителят натисне някои
key, редактираният елемент ще съдържа класkeypressed, докато те не са оставили контрола. - Всеки променлив елемент ще съдържа клас
changed - Ако компонентът променя някои стойности, основният елемент ще съдържа клас
ui-editable-changed - Ако елементът има
data-bindсempty, той ще бъде изчистен след фокус - NEW сега поддържа
tagsтип. засега поддържа само сrebindиdata-bind. (даточна връзкаtemplateс{jQuery selector}работи от+v18) - NEW ако елементът (или родител, или родител на родител) съдържа атрибут
data-disabled="1", контрола ще бъде изключена - NEW скрити и деактивирани елементи няма да бъдат валидирани
Използвайте го с <ui-component name="editable">Когато компонентът все още не е зареден, jComponent Изтегляне на първия адрес в DEF.fallback (След това Componentator Източник: Питър Шерка Componentator Съставни съставки, лиценз на MIT.
<style>
.changed {}
.changed::after { float: right; content: '+'; margin-left: 5px; font-weight: normal; color: orange; }
</style>
<ui-component name="LAZY datepicker"></ui-component>
<ui-component name="LAZY directory"></ui-component>
<ui-component name="editable" path="form">
<div style="width:500px;padding:10px;border:1px solid #E0E0E0">
<div class="row">
<div class="col-xs-3">
Name:
</div>
<div class="col-xs-9">
<ui-bind path="form.name" config="html" class="editable block" data-editable="required:true"></ui-bind>
</div>
</div>
<div class="row">
<div class="col-xs-3">
Email:
</div>
<div class="col-xs-9">
<ui-bind path="form.email" config="html" class="editable block" data-editable="required:1;type:email"></ui-bind>
</div>
</div>
<div class="row">
<div class="col-xs-3">
Nickname:
</div>
<div class="col-xs-9">
<ui-bind path="form.nickname" config="empty:Nickname;html" class="editable block" data-editable="required:true"></ui-bind>
</div>
</div>
<div class="row">
<div class="col-xs-3">
Framework:
</div>
<div class="col-xs-9">
<ui-bind class="editable block" config="html;empty:Choose a framework;change:renderframework" path="form.frameworkid" data-editable="dirsource:frameworks;"></ui-bind>
</div>
</div>
<div class="row">
<div class="col-xs-3">
Country:
</div>
<div class="col-xs-9">
<ui-bind path="form.countries" config="template:{#countrytags}" class="editable block" data-editable="rebind:1;dirsource:countries;type:tags"></ui-bind>
</div>
</div>
<div class="row">
<div class="col-xs-3">
Date:
</div>
<div class="col-xs-9">
<ui-bind path="form.date" config="html:(new Date() || value).format('yyyy-MM-dd')" class="editable block" data-editable="type:date"></ui-bind>
</div>
</div>
</div>
<pre><ui-bind path="form" config="html:JSON.stringify(value, null, ' ')"></ui-bind></pre>
</ui-component>
<script type="text/html" id="countrytags">
{{ foreach m in value }}<span class="editable-tag"><i class="ti ti-times"></i>{{ m }}</span>{{ end }}
</script>
<script>
// Alternative to tags (ui-bind path="path" config="change:myfunc")
function myfunc(data, path, el) {
if (!data)
return el.html('');
var template = '<span class="tag"><i class="ti ti-times"></i>{0}</span>';
var html = '';
for (var i = 0; i < data.length; i++)
html += template.format(data[i]);
el.html(html);
}
var frameworks = [{ id: 0, name: 'Nothing', template: '<b>{{ name }}</b>' }, { id: 1, name: 'jComponent' }, { id: 2, name: 'Angular.js' }, { id: 3, name: 'React' }];
var countries = ['Slovakia', 'Poland', 'Hungary', 'Germany', 'USA', 'Austria', 'Poland', 'Czechia'];
var form = {};
form.date = new Date();
form.name = 'Peter Širka';
form.countries = ['Slovakia', 'Hungary'];
form.frameworkid = 0;
function renderframework(value, path, el) {
return value ? frameworks.findValue('id', value, 'name', DEF.empty) : DEF.empty;
}
</script>