j-Editable
Este componente pode editar todos os elementos com a classe editable. Ele funciona com valores de data-bind ou dinâmicos.
Configuração:
autofocus{Boolean} concentra-se no primeiro item (default:false)validate{Boolean} pode desativar a validação (default:true)disabled{Boolean} pode desativar a edição (addiciona classes deui-editable-disabledeui-editable-enabled), padrão:falsechanged{String} opcional, um link para um método ou caminho --> contém o objeto com valores alterados apenasenter{String} opcional, um link para um métodomethod(path, value, el), o método é executado se o usuário pressionarENTERescape{String} opcional, um link para um métodomethod(path, value, el), o método é executado se o usuário pressionarESCcan{String} opcional, um link para o métodomethod(opt, el)deve retornarboolean, isto significacan edit?error{String} opcional, um link para o métodomethod(el, isInvalid, meta)é avaliado quando o item é inválido e vice-versa- NEW
class {String}opcional, adiciona um nome de classe no formulárioui-editable-CLASS(default:default)
O atributo data-editable descreve o comportamento:
path{String} um caminho relativo para a propriedade (pode ser herdado dedata-bindautomaticamente)required{Boolean} opcional, permite "requisito" (default:false)type{String} opcional, pode serstring(default),date,number,boolean,emailouhtmlNEWtagscan{String} opcional, um caminho parafunction(opt, el)deve retornarboolean, isto significacan edit?save{String} opcional, um caminho parafunction(opt, accepted(boolean)), a funçãoaccepteddeve ser avaliadaformat{String} opcional, um formato paradate, padrão:yyyy-MM-dddirsource{String} opcional, caminho para uma fonte de dadosdircustom{String/Boolean} opcional, pode conter um caminho parafunction(val, next(new_val))ou pode serBoolean. esta opção pode permitir adicionar um valor personalizado (valor não definido na fonte de dados)dirrender{String} opcional, um caminho parafunction(item, text)(deve retornar HTML paraj-Directory), esta função pode afetar a lista de itens emj-Directorydirminwidth{Número} opcional, uma largura mínima paraj-Directory, padrão:200dirmaxwidth{Número} opcional, uma largura máxima paraj-Directorydirplaceholder{String} opcional, um locatário paraj-Directorydirempty{String} opcional, adiciona um campo vazio paraj-Directorydirkey{String} opcional, um nome chave para a leitura detextemdirsource(default:name)dirvalue{String} opcional, um nome chave para a leitura devalueemdirsource(default:id)dirsearch{Boolean} opcional, pode desativar a pesquisa paraj-Directoryautosource{String} um caminho para a funçãosearchemautocomplete,function(search, render(arr))autovalue{String} um caminho de propriedade para o valor emautosourcemaxlength{Número} um máximominvalue{Número} um valor mínimo para o tipo de número (default:undefined)maxvalue{Número} um valor máximo para o tipo de número (default:undefined)rebind{Boolean} se otruerefutadata-bindapenas a este elemento (default:0)validate{String} opcional, uma condição para validação de valor, pode conter um link parafunction(value)ou!!value.match(/[a-z]+/)multiline{Boolean} opcional, permite multiline + apendices classeeditable-multiline(inline-block+width:100%) quando é edição (default:false)raw{Boolean} opcional, quandotrueentão o conteúdo HTML atual será como um local se o valor énullable(default:true)accept{String} opcional, uma condição de aceitação de valor, pode conter um link parafunction(value)ou!!value.match(/[a-z]+/)é semelhante avalidateempty{String} opcional, permite um valor vazio e pode conter um rótulo vazio ou1outruepara o autorebindde ligaçãoinvalid{String} opcional, um link para o métodomethod(el, isInvalid, meta)é avaliado quando o item é inválido e vice-versa
Métodos:
- NEW:
component.changed()retorna um objeto com dados alterados
Bom para saber:
- Se o usuário pressionar algum
key, então o elemento editável contém a classekeypressedenquanto eles não deixam o controle. - Cada elemento alterado contém uma classe de
changed - Se o componente alterar alguns valores, o elemento principal contém a classe
ui-editable-changed - Se o elemento tiver
data-bindcomempty, ele será limpo após foco - NEW agora suporta o tipo
tags. atualmente só suporta comrebindedata-bind. (data-bindtemplatecom{jQuery selector}trabalha de+v18) - NEW se o elemento ( ou pai, ou pai de pai) contém o atributo
data-disabled="1", o controle será desativado - NEW elementos ocultos e desativados não serão validados
Use-o com <ui-component name="editable">Quando o componente ainda não está carregado, jComponent Descarrega-o no primeiro uso do endereço DEF.fallback (a partir do Componentator CDN por padrão). autor: Peter Širka. fonte: o Componentator Reserva de componentes, licença 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>