j-Editable
Acest component poate edita toate elementele cu clasa editable. funcționează cu valori data-bind sau dinamice.
Configurarea:
autofocus{Boolean} se concentrează pe primul element (default:false)validate{Boolean} poate dezactiva validarea (default:true)disabled{Boolean} poate dezactiva editarea (adăugă clasaui-editable-disabledșiui-editable-enabled), în mod implicit:falsechanged{String} opțional, un link la o metodă sau cale --> va conține obiectul cu valori modificate numaienter{String} opțional, un link la o metodămethod(path, value, el), metoda este executată dacă utilizatorul presteazăENTERescape{String} opțional, un link la o metodămethod(path, value, el), metoda este executată dacă utilizatorul presteazăESCcan{String} opțional, un link la metodamethod(opt, el)trebuie să se întoarcă laboolean, înseamnăcan edit?error{String} opțional, un link la metodamethod(el, isInvalid, meta)este evaluat atunci când elementul este invalid și invers- NEW
class {String}opțional, adaugă un nume de clasă în formularului-editable-CLASS(default:default)
Atribuția data-editable descrie comportamentul:
path{String} o cale relativă la proprietate (poate fi moștenite automat de ladata-bind)required{Boolean} opțional, permite "required" (default:false)type{String} opțional, poate fistring(default),date,number,boolean,emailsauhtmlNEWtagscan{String} opțional, o cale lafunction(opt, el)trebuie să se întoarcă laboolean, ceea ce înseamnăcan edit?save{String} opțional, o cale lafunction(opt, accepted(boolean)), funcțiaacceptedtrebuie evaluatăformat{String} opțional, un format pentrudate, standard:yyyy-MM-dddirsource{String} opțional, calea către o sursă de datedircustom{String/Boolean} opțional, poate conține o cale lafunction(val, next(new_val))sau poate fiBoolean.Această opțiune poate permite adăugarea unei valori personalizate (valorile nu sunt definite în sursa de date)dirrender{String} opțional, o cale lafunction(item, text)(trebuie să se întoarcă HTML pentruj-Directory), această funcție poate afecta lista de elemente înj-Directorydirminwidth{Număr} opțional, o lățime minimă pentruj-Directory, standard:200dirmaxwidth{Număr} opțional, o lățime maximă pentruj-Directorydirplaceholder{String} opțional, un locator pentruj-Directorydirempty{String} opțional, adaugă un câmp gol pentruj-Directorydirkey{String} opțional, un nume cheie pentru citireatextîndirsource(default:name)dirvalue{String} opțional, un nume cheie pentru citireavalueîndirsource(default:id)dirsearch{Boolean} opțional, poate dezactiva căutarea pentruj-Directoryautosource{String} o cale la funcțiasearchînautocomplete,function(search, render(arr))autovalue{String} o cale de proprietate pentru valoarea înautosourcemaxlength{Număr} o lungime maxăminvalue{Număr} o valoare minimă pentru tipul de număr (default:undefined)maxvalue{Număr} o valoare maximă pentru tipul de număr (default:undefined)rebind{Boolean} în cazul în caretruerebinddata-bindnumai la acest element (default:0)validate{String} opțional, o condiție de validare a valorii, poate conține un link lafunction(value)sau!!value.match(/[a-z]+/)multiline{Boolean} opțional, permite clasa multilină + aplicareeditable-multiline(inline-block+width:100%) atunci când este editarea (default:false)raw{Boolean} opțional, atunci cândtrueapoi conținutul actual HTML va fi ca un locator dacă valoarea estenullable(default:true)accept{String} opțional, o condiție de acceptare a valorii, poate conține un link lafunction(value)sau!!value.match(/[a-z]+/)este similar cuvalidateempty{String} opțional, permite valoarea goală și poate conține eticheta goală sau1sautruepentru autorebindde legăturăinvalid{String} opțional, un link la metodamethod(el, isInvalid, meta)este evaluat atunci când elementul este invalid și invers
Metode:
- NEW:
component.changed()întoarce un obiect cu date modificate
bine să știi:
- Dacă utilizatorul prestează un anumit
key, atunci elementul editabil va conține clasakeypressedatâta timp cât nu au părăsit controlul. - Fiecare element modificat va conține clasa
changed - Dacă componenta schimbă anumite valori, elementul principal va conține clasa
ui-editable-changed - Dacă elementul are
data-bindcuempty, acesta va fi curățat după focalizare - NEW susține acum tipul
tags. pentru moment susține numai curebindșidata-bind. (data-bindtemplatecu{jQuery selector}funcționează de la+v18) - NEW dacă elementul (sau părinte, sau părinte) conține atributul
data-disabled="1", controlul va fi dezactivat - NEW elemente ascunse și dezactivate nu vor fi validate
Utilizați-l cu <ui-component name="editable">Când componenta nu este încă încărcată, jComponent Descărcați-l la prima utilizare de la adresa DEF.fallback (în cazul Componentator Autor: Peter Širka. sursă: Componentator Componente de stocare, MIT licență.
<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>