podmíněná editace v gridu
- yucikala
- Člen | 3
Dobrý den.
Používám ublaboo/datagrid. A v něm mám zapnutou inline Editaci.
Potřebloval bych ale mít možnost podmíněné inline editace. Tedy možnost některé řádky editovat a některé ne. Zkoušel jsem přes addAction přidat editaci (zkopírováním vyrendrovaného html z tlačítka pro editaci), ale to se mi nepovedlo rozchodit. Umím vypnout zapnout editaci pro všechny řádky v tabulce. Ale já potřebuji povolit editaci jen pro nějaké.
Nemáte náhodou někdo nějaké řešení?
Díky
- Kamil Valenta
- Člen | 820
Takto například půjdou editovat jen řádky se sudými ID…
$grid->allowRowsAction('edit', function($item) {
return $item->id % 2;
});
--
EDIT: aha, v případě inline editace si to asi na akci nesáhne. Pokud ne,
obalil bych IFem container a negeneroval žádné inputy, pokud není pro daný
řádek editace přípustná…
Editoval Kamil Valenta (6. 9. 2021 17:49)
- yucikala
- Člen | 3
Děkuju za odpověď a snahu pomoci.
Nakonec jsem to obešel malým hackem, kdy kontroluji samozřejmě na straně
serveru, jestli je update možný, ale na straně klienta tlačítko na editaci
schovávám.
Řešení (samotnou schovávací fci jsem pojmenoval hideShowEditIcons(), v ní sleduji, zda existuje tlačítko „success“, pokud ano, smím editovat. Tlačítko success mám pak v controleru v php pod ifem… ):
function hideShowEditIcons(){
$(„a.datagrid-inline-edit-trigger“).hide();
var tblRows =
$(„#snippet-reservationProvisionControl-reservationProvisionsGrid-table
tr[data-id]“);
tblRows.each(function(index, value) {
var row = $(this).find(„a.btn-success“).length;
if (row > 0){
$(this).find(„a.datagrid-inline-edit-trigger“).show();
}
});
}
$(document).ready(function() {
hideShowEditIcons();
/*
see https://stackoverflow.com/…-is-complete
při stránkování se nám nezavolá document.ready, protože se jede přes
XMLHttpRequest. Tady pak nepomáhají klasické jquery ajax.completed atp…
*/
var oldOpen = XMLHttpRequest.prototype.open;
function onXmlRequestLoadEnd(event) {
hideShowEditIcons();
}
XMLHttpRequest.prototype.open = function() {
// when an XHR object is opened, add a listener for its readystatechange
events
this.addEventListener(„loadend“, onXmlRequestLoadEnd)
// run the real open
oldOpen.apply(this, arguments);
}
});
- yucikala
- Člen | 3
Ozzrel napsal(a):
No to je pořešeno funkcí allowRowsInlineEdit viz dokumentace
Uf. Jak někdy taková hovadina zabere tolik času. Díky. Tohle je přesně ono.