Je možné nastavit, aby se return value z filtru u inputu nenastavovala jako hodnota inputu?
- Polki
- Člen | 553
Čau. Nadpis řekl vše.
Jde mi o toto:
No a tím jsem dosáhl, že když uživatel některé checkboxy zaklikne, tak mi vrátí mujInput součet hodnot a místo 4 sloupců v db mám jen jeden.
Jednoduše tedy pokud si uživatel zaklikne ‚druha‘ a ‚ctvrta‘, tak mujInput vrátí číslo 10. To se uloží do DB a při načtení z DB se rozparsuje podle masky. Takže vím, že když mám v DB číslo 10, neboli 1010, tak je zakliknutý chb ‚ctvrta‘ a chb ‚druha‘
Problém je, že při nepodařeném pokusu o vyhodnocení nastane to, že filtr nastaví setValue u inputu na 10 a laděnka vyhodí error 10 are out of allowed set…
Takže.
- Je možnost nějak zakázat toto chování nastavování výchozí hodnoty? Podle projití kódu bych řekl ne. Ale kdo ví možná jste chytřejší.
- pokud ne je možnost do metody setValue předat callback, který ji přepíše, takže si v ní budu parsovat 10 na 4 a 2? Podmínkou je, abych nemusel tvořit vlastní komponentu.
- pokud nelze ani 2, je možné udělat něco jako addFilter ale pro vstup do inputu?
Dík za rady
- Kamil Valenta
- Člen | 820
Nebo bych to řešil na nějakém předkovi, ze kterého všechny formy budou
dědit.
Aby ses nemusel všude tahat s tím ->addFilter,
napsal bych si v předkovi něco jako ->addBinCheckboxList, který by
vrátil addCheckboxList, ale hned by na něm zavolal addFilter.
Pak by sis přepsal setDefaults(), která by v případě checkboxlistů
nastavila jednotlivé položky.
Bylo by to vše na jednom místě a neroztahovalo by se to po jednotlivých modelech…
- Polki
- Člen | 553
@MajklNajt Udělal jsem to tak, ale jde mi o to, že chci zachovat a přijde mi kouzelnější toto:
Komponenta formuláře:
manager:
Protože podle principu Nette: ‚Less CODE ⇒ More security.‘
@kamil_v Good point. Ovšem jde o to, že jsem převzal projekt po jiných lidech. Jistě, že první, co mě napadlo tak to řešit traitou, kterou by implementoval formulář, který by se tvořil jako základ do jednotlivých komponent, na což se snaží nasměrovat i samo nette v sandboxu, ale tito lidi byli slušně řečeno vymykající se a napsali si většinu formulářů natvrdo do presenterů, kde je vytvářeli pomocí new Form(); přímo v metodě createComponent… místo tvorby továrničky. A přepisovat toto do továrniček je práce navíc, takže jsem to zatím dočasně řešil tím modelem, jak říkal MajklNajt bohužel.
- Kamil Valenta
- Člen | 820
Pokud jsou komponenty tvořeny přes new Form();, tak je to
jen otázka aktualizace use.
Což by mělo jít refactorovat celkem automatizovaně.