Formulář pro inline editaci x položek

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
akadlec
Člen | 1326
+
0
-

Narazil jsem na poměrně zajímavou extension do TWB pro inline editaci prvků: http://vitalets.github.io/x-editable/ docela se mi líbí to řešení a asi bych jej i dokázal využít pro editaci malých prvků ve stránce abych nemusel otvírat do okna form třeba s 10ti políčky když chci editovat stejnak jen jedno.

Otázka zní, jak to řešit formulářove? Dejme tomu že mám 10 položek které chci takto editovat. Vytvoření 10ti formulářů mi nepříjde moc košér, a pokud to zase udělám tak že to bude jeden form s 10ti políčky tak to bude šlapat za předpokladu kdy tam nepřidám validační pravidla, třeba jen na nutnost vyplnění. Dejme tomu že položky budou v první fázi nevyplněny a když je budu poprve plnit tak by mě to řvalo při validaci formu že je potřeba vyplnit zbývajících 9 políček.

Takže nějaký tip jak by se to dalo řešit v nette?

LeonardoCA
Člen | 296
+
0
-

Spis pro inspiraci. (Neni to idealni, ale rychle a funkcni.)

Resil jsem to bez nette formularu zhruba takhle s vyuzitim nette-ajax.js (vlastni validaci resil $mapper) Formulare si editable.js vytvori sam podle potreby, staci mu predat url, ktere ma volat pro odeslani…

$('.editable').editable({
    showbuttons:false,
    onblur:'submit',
    source: {link EditableData},
    sourceCache:true,
    url:function (params) {
        $.nette.ajax({
            url:  {link Editable},
            dataType:'json',
            data:params,
            type:'POST',
            success:function (oData, textStatus, jqXHR) {
                //console.log(textStatus);
            },
            error:function (payload) {
                //console.log('payload');
                //var d = new $.Deferred;
                //return d.reject('error message'); //error via deferred object
            }
        });
    }
});

a handles v komponente

public function handleEditableData()
{
    $this->presenter->sendResponse(
        new JsonResponse($this->mapper->getEditableData($this->presenter->request->post))
    );
}


public function handleEditable()
{
    $this->mapper->updateEditable($this->presenter->request->post);
}

(vytahl jsem to ze starsich zdrojaku, tak nevim nakolik je to kompatibilni se soucasnym nette, nette-ajax.js a editable)

Stejne jako s nette-ajax.js to lze resit i beznym volanim ajax(), jen vyhoda pro mne byla, ze jsem mel na nette-ajax nejaky monitoring requestu a zjednodusovalo mi to spolupraci s dalsimi nette-ajax rozsirenimi.

Editoval LeonardoCA (11. 12. 2013 21:31)