Integrace Vue.js ovládacích prvků s Nette

RedHouse
Člen | 4
+
0
-

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é.

docky
Člen | 59
+
+1
-

Ahoj, a co takhle jim dát jenom name="" a data pak získat takhle : $values = $form->getHttpData() ?

RedHouse
Člen | 4
+
0
-

docky napsal(a):

Ahoj, a co takhle jim dát jenom name="" a data pak získat takhle : $values = $form->getHttpData() ?

Ahoj! o funkci getHttpData() vůbec nevím! Myslím, že to je asi jednoduché elegantní řešení, které hledám! Děkuju mnohokrát!!

Felix
Nette Core | 1245
+
+1
-
<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>.

Editoval Felix (3. 1. 2018 23:08)

RedHouse
Člen | 4
+
0
-

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
+
+1
-

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
+
0
-

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 ?

akadlec
Člen | 1326
+
0
-

@chemix spíše name ne? ID se snad v requestu nepřenáší ne?

chemix
Nette Core | 1310
+
0
-

@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 ;-)

akadlec
Člen | 1326
+
0
-

@chemix tak ono pokud ten form renderuje v latte tak tam by problem byt neměl, jen to bude chtít vytahovat to jméno elementu a to dávat do těch <el-input atd. Vuečku je jedno jaký to má name, on pracuje s vlastním modelem.