j-Editable
Ce composant peut éditer tous les éléments avec la classe editable. Il fonctionne avec data-bind ou des valeurs dynamiques. Apprenez-en davantage à partir d’un exemple.
Configuration :
autofocus{Boolean} concentre le premier élément (par défaut :false)validate{Boolean} peut désactiver la validation (par défaut :true)disabled{Boolean} peut désactiver l'édition (il ajoute les classesui-editable-disabledetui-editable-enabled), par défaut :falsechanged{String} facultatif, un lien vers une méthode ou un chemin --> il contiendra l'objet avec les valeurs modifiées uniquemententer{String} optionnel, un lien vers une méthodemethod(path, value, el), la méthode est exécutée si l'utilisateur appuie surENTERescape{String} optionnel, un lien vers une méthodemethod(path, value, el), la méthode est exécutée si l'utilisateur appuie surESCcan{String} optionnel, un lien vers la méthodemethod(opt, el)doit renvoyerboolean, cela signifiecan edit?error{String} facultatif, un lien vers la méthodemethod(el, isInvalid, meta)est évalué lorsque l'élément est invalide et vice-versa- NEW
class {String}facultatif, ajoute un nom de classe sous la formeui-editable-CLASS(par défaut :default)
L'attribut data-editable décrit le comportement :
path{String} un chemin relatif vers la propriété (peut être hérité automatiquement dedata-bind)required{Booléen} facultatif, active "obligatoire" (par défaut :false)type{String} en option, peut êtrestring(par défaut),date,number,boolean,emailouhtmlNEWtagscan{String} facultatif, un chemin versfunction(opt, el)doit renvoyerboolean, cela signifiecan edit?save{String} facultatif, un chemin versfunction(opt, accepted(boolean)), la fonctionaccepteddoit être évaluéformat{String} facultatif, un format pourdate, par défaut :yyyy-MM-dddirsource{String} facultatif, chemin vers une source de donnéesdircustom{String/Boolean} facultatif, peut contenir un chemin versfunction(val, next(new_val))ou peut êtreBoolean. Cette option peut permettre l'ajout d'une valeur personnalisée (valeur non définie dans la source de données)dirrender{String} facultatif, un chemin versfunction(item, text)(doit renvoyer du HTML pourj-Directory), cette fonction peut affecter la liste des éléments dansj-Directorydirminwidth{Number} facultatif, une largeur minimale pourj-Directory, par défaut :200dirmaxwidth{Number} en option, une largeur maximale pourj-Directorydirplaceholder{String} en option, un espace réservé pourj-Directorydirempty{String} facultatif, ajoute un champ vide pourj-Directorydirkey{String} facultatif, un nom de clé pour la lecture detextdansdirsource(par défaut :name)dirvalue{String} facultatif, un nom de clé pour la lecture devaluedansdirsource(par défaut :id)dirsearch{Boolean} facultatif, peut désactiver la recherche dej-Directoryautosource{String} un chemin vers la fonctionsearchdansautocomplete,function(search, render(arr))autovalue{String} un chemin de propriété pour la valeur dansautosourcemaxlength{Numéro} une longueur maximaleminvalue{Numéro} par minute. valeur pour le type de numéro (par défaut :undefined)maxvalue{Numéro} un maximum. valeur pour le type de numéro (par défaut :undefined)rebind{Booléen} sitruereliedata-bindsur cet élément uniquement (par défaut :0)validate{String} optionnel, condition de validation de valeur, peut contenir un lien versfunction(value)ou!!value.match(/[a-z]+/)multiline{Boolean} facultatif, active le multiligne + ajoute la classeeditable-multiline(inline-block+width:100%) lors de l'édition (par défaut :false)raw{Booléen} facultatif, lorsquetruealors le contenu HTML actuel sera comme espace réservé si la valeur estnullable(par défaut :true)accept{String} facultatif, condition d'acceptation de valeur, peut contenir un lien versfunction(value)ou!!value.match(/[a-z]+/)est similaire àvalidateempty{String} facultatif, active une valeur vide et peut contenir une étiquette vide ou1outruepour l'autorebinddu classeurinvalid{String} facultatif, un lien vers la méthodemethod(el, isInvalid, meta)est évalué lorsque l'élément est invalide et vice-versa
Méthodes :
- NEW :
component.changed()renvoie un objet avec des données modifiées
Bon à savoir :
- si l'utilisateur appuie sur
keyalors l'élément modifiable contiendra la classekeypressedtant qu'il n'a pas quitté le contrôle - chaque élément modifié contiendra la classe
changed - si le composant change certaines valeurs, l'élément principal contiendra la classe
ui-editable-changed - si l'élément a
data-bindavecempty, il sera effacé après le focus - NEW prend désormais en charge le type
tags. Pour l'instant, prend en charge uniquement avecrebindetdata-bind. (la liaison de donnéestemplateavec{jQuery selector}fonctionne à partir de+v18) - NEW si l'élément (ou parent, ou parent de parent) contient l'attribut
data-disabled="1", le contrôle sera désactivé - NEW éléments masqués et désactivés ne seront pas validés
Utilisez-le avec <ui-component name="editable">. Lorsque le composant n'est pas encore chargé, jComponent le télécharge lors de la première utilisation depuis l'adresse dans DEF.fallback (le CDN Componentator par défaut). Auteur : Peter Širka. Source : le référentiel de composants Componentator, licence 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>