Integrace Vue.js ovládacích prvků s Nette
- RedHouse
- Člen | 4
Ahoj!
Snažím se propojit ovládací prvky založené na Vue s formuláři v Nette. Rovnou se přiznám, že v oblasti Nette a Vue jsem nováček a omlouvám se, pokud mi něco zásadního uniká. Co se týče Vue, konkrétně se jedná o tuto knihovnu: http://element.eleme.io/#… . Zatím mám toto:
Přihlašovací formulář:
protected function createComponentSignInForm()
{
$form = new Form;
$form->addText('user')->setRequired();
$form->addPassword('password')->setRequired();
$form->addCheckbox('checkbox1', 'Možnost A');
$form->addCheckbox('checkbox2', 'Možnost B');
$form->addSubmit('send');
$form->onSuccess[] = [$this, 'registrationFormSucceeded'];
return $form;
}
Sign:in latte šablonu s formulářem:
<form n:name=signInForm class=form>
<!-- Uživatelské jméno -->
<label n:name=user>Username:
<el-input n:name=user></el-input>
</label>
<br>
<!-- Heslo -->
<label n:name=password>Password:
<input n:name=password>
</label>
<br>
<!-- Checkboxy -->
<el-checkbox v-model="checked" label="1">Možnost A</el-checkbox><br>
<el-checkbox v-model="checked" label="2">Možnost B</el-checkbox><br>
<br>
<!-- Potvrzení -->
<el-button n:name="send" type="primary" native-type="submit">Potvrdit</el-button>
</form>
Co se týče klasického inputu (textBoxu), stačilo ho nahradit inputem <el-input> z knihovny a vše funguje v pořádku. Když sem u potvrzovacího tlačítka nahradil <button> tag <el-button> tagem, z nějakého důvodu zmizel z tlačítka jeho text. To sem později vyřešil tak, že sem úplně odstranil atribut n:name a tlačítko i nadále fungovalo jako potvrzovací. Předpokládám, že asi kvůli tomu, že má button atribut native-type=„submit“? Hlavní problém je v tom, že nevím, jak mám postupovat u checkboxů. Když jim totiž nastavím n:name, zobrazí se oba checkboxy v sobě (původní z nette a ten nový z knihovny). Po samotném spuštění se <el-checkbox> ve zdroji stránky přemění na:
<label role="checkbox" class="el-checkbox">
<span aria-checked="mixed" class="el-checkbox__input">
<span class="el-checkbox__inner"></span>
<input type="checkbox" class="el-checkbox__original" value="1">
</span>
<span class="el-checkbox__label">Možnost A</span>
</label>
Tento kód sem zkoušel vykopírovat a u inputu nastavit n:name a poté ho
použít v šabloně, ale touto metodou přijdu o funkčnost atributu v-model
z Vue, takže checkbox nejde zaškrtnout. Stejný problém mám i u radio
buttonu.
Má otázka tedy zní: je vůbec možné checkbox z této Vue knihovny propojit
s Nette? Jestli ano, tak jak? Uniká mi něco zásadního? Pro jistotu
přikládám i svůj pracovní projekt a obrázek formuláře.
Obrázek: http://www.imagehosting.cz/?…
Projekt: https://uloz.to/…T5Hn/web-rar
Předem děkuji všem, kdo budou ochotný nějak pomoci, případně mě ujistit, že se pokouším o nemožné.
- RedHouse
- Člen | 4
Felix napsal(a):
<el-input n:name=user></el-input>
Bohuzel toto nelze pouzit, protoze n:name makro funguje spravne jenom na <input>, <form>, <textarea>, <checkbox>, <select> a <button>.
Dobře děkuju za upozornění a pomoc, nakonec to asi budu muset vyřešit tak, jak psal docky nahoře.
- chemix
- Nette Core | 1310
Skoda ze tim ale prijdes o nette validace. Alespon na serveru bych je zkusil nechat a zkusil bych nastavovat html id v php kodu formulare.
Jinak pak uz nema cenu delat formulare jako nette formulare ale udelat si nejake api endpointy na ktere to budes sypat a ze kterych budes cist.
Nebo @Felix ty to mas propojene nejak dumyslne?
- RedHouse
- Člen | 4
chemix napsal(a):
Skoda ze tim ale prijdes o nette validace. Alespon na serveru bych je zkusil nechat a zkusil bych nastavovat html id v php kodu formulare.
Jinak pak uz nema cenu delat formulare jako nette formulare ale udelat si nejake api endpointy na ktere to budes sypat a ze kterych budes cist.
Nebo @Felix ty to mas propojene nejak dumyslne?
Ahoj děkuju za reakci, validaci si v nette formulářích v podstatě velmi jednoduše můžu doprogramovat sám, ne ?
- chemix
- Nette Core | 1310
@akadlec tak name
mas nastavene hned od zacatku, spis
jsem to myslel, aby tam mel to id
pro pripadny js uz od php, ale az
ted si uvedomuji, jak je vue uplne jine. A ze je to vlastne mozna uplne neco
jineho.
Ze vlastne muze ten form nadefinovat jen s tema `<el-button name=‚xxx‘ …> spis je pak otazka jak to vue vlastne zpracovava? Treba nahodi nejakej komentar @Felix ;-)