Autor Zpráva
Hallo
Profil *
Ahoj, snažím se o pseudogrid, u rowSelect metody mi nějak (nebo spíš někam) utíká scope .. předaná property je undefined .. mrkněte na to někdo prosím...

var KtplDS = new DataStore();
KtplDS.setUrl('{link Akoncerts:TemplatesSource}');

function KtplGrid(){
    var unique = Math.round((new Date()).getTime());  
    var datastore = null;
    var storedData = false;
    var tempData = false;
    var target_element = false;    
    var rowSelectFunction = false;
    var updateData = function(overwrite) {
        datastore.update(function(JSONres){
            storedData = JSONres;
            parseData(overwrite);
            return ;
        });
    };
    var parseData = function(overwrite) {
        // hook pro iteraci nad DS
        if(overwrite) {
            prepareSkeleton();
        }
        return ;
    };
    var prepareSkeleton = function() {
        var buffer = [];
        buffer.push('<div class="st-tr-wrapper"><div class="st-tr-header">Správa šablon koncertů</div>');
        buffer.push('<div class="st-tr-left">Položka<ul>');    
        
        if(storedData.count)
        {
            // fill data from datastore
            tempData = storedData.data;
            
            // test row select function
            if(typeof rowSelectFunction == 'function') {
                var rowSelect = true;
            } else {
                var rowSelect = false;    
            }
            
            for (var iks in tempData) {
                buffer.push('<li class="st-tr-item"');
                if(rowSelect) {
                    buffer.push('onclick="ktplGrid.rowSelect(',parseInt(tempData[iks]['idconcerts']),')"');
                }
                buffer.push('>');
                if(parseInt(tempData[iks]['active'])) {
                    buffer.push('<strike>');
                }
                buffer.push(tempData[iks]['internal_name']);
                if(parseInt(tempData[iks]['active'])) {
                    buffer.push('</strike>');
                }
            
                buffer.push('</li>');
            };
        } else {
            buffer.push('<li>no data</li>');
        }
        buffer.push('</ul></div>');
        buffer.push('<div class="st-tr-dataentry" id="');
        buffer.push(unique,'"></div></div>');
        $('#'+target_element).html(buffer.join(''));
    };
    return  {
        setStore : function(DStore) {
            if(typeof DStore == 'object') {
                datastore = DStore;
                return true;
            } else {
                return false;
            }
        },
        registerRowSelect: function(FnK) {
            if(typeof FnK == 'function') {
                rowSelectFunction = FnK;
                return true;
            } else {
                return false;
            }
        },
        rowSelect: function(rowid) {
            // test row select function
            if(typeof rowSelectFunction == 'function') {
                // test grid state and row id
                if(tempData && typeof tempData[rowid] != 'undefined') {
                    rowSelectFunction.call(tempData[rowid],unique);
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        },
        setTargetHook : function(TargetElement) {
            target_element = TargetElement;
        },
        render : function(overwrite) {
            updateData(overwrite);
        }
    }
}

ktplGrid = new KtplGrid();
ktplGrid.setStore(KtplDS);
ktplGrid.setTargetHook('snippet--content');
ktplGrid.registerRowSelect(function(row,uq){
    var buffer = [];
    buffer.push('Šablona koncertu "',row['internal_name'],'"<br/>')
    buffer.push('<form id="st-art-form" method="POST">');
    buffer.push('<input type="hidden" name="idartists" value="',row['idkoncerts'],'"/>');
    buffer.push('<fieldset id="basic">','<legend>Nastavení</legend>');    
    buffer.push('<label for="name">Interní název </label>');
    buffer.push('<input name="name" value="',row['internal_name'],'"/>');    
    buffer.push('<label for="translate_name">Šablona je aktivní</label>');    
    buffer.push('<input type="checkbox" name="active"');
    if(parseInt(row['active'])) {
        buffer.push('checked="checked"');
    } else 
    buffer.push('"/>');
    buffer.push('</fieldset>');
    buffer.push('<input name="submit" type="submit" value="Odeslat"></form>');
    $('#'+uq).html(buffer.join(''));
});
ktplGrid.render(true);
_es
Profil
Hallo:
Skús ten problém nejako vyseparovať, v hentom akože OOP chaose sa ťažko vyznať. Aká metóda? Kde je definovaná? Kde je volaná? Aká „property“?
Hallo
Profil *
metoda je rowSelect, problém je už vyřešen, zapoměl jsem předat u call context - takže arg1 byl brán jako arg0 ..


Jinak souhlasím, že je to OOP humus, nemám JS vývojáře a přece jen můj skill s JS je roven nule ..

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: