sql >> Database >  >> NoSQL >> MongoDB

Bindende dynamische serverreactie (geneste json)

Het enige dat uiteindelijk verandert, is hoe u wilt dat de instructies worden gebruikt en uitgebreid. Deze zijn een beetje anders dan de vorige, maar een belangrijk ding is dat de appendChild mag niet binnen zijn de instructies attributen lus voor het knooppunt maar direct erbuiten; er moet ook wat aandacht worden besteed aan enkele speciale attributen, misschien class is niet de enige, wie weet :) ...probeer het binnenste for block volledig te vervangen met het volgende:

var tag = null, a;
if ('tag' in _instr) {
    tag = document.createElement(_instr.tag);

    if ('attributes' in _instr)
        for(a in _instr.attributes) {
            a.match(/^class$/) && (a = 'className');
            tag.setAttribute(a,_instr.attributes[a]);
        }

    if ('events' in _instr)
        for(a in _instr.events)
            tag.addEventListener(a,_instr.events[a], false);

    //
    // if ('content' in _instr && _instr.content!==null)
    //  tag.innerHTML = _instr.content;
    //
    // but take care ... what if is a input[text] 

    tag[_instr.tag=='input' ? 'value' : 'innerHTML'] = ('content' in _instr && _instr.content !== null) ? _instr.content : o[k];

    if ('children' in _instr)
        for(a in _instr.children)
            _(_instr.children[a], a, tag);

    !!_n && !!tag && _n.appendChild(tag);
}

==================

BIJGEWERKT

Nu is de output nu precies de verwachte. Ik heb zelfs een stomme bug opgelost die de class afhandelde attribuut. Probeer het uit, misschien zelfs op andere invoer, ik heb geprobeerd om tekst in plaats van null op sommige gegevens te zetten en het ziet er goed uit. Tot ziens!

function assemble (data, instr) {
    var n = document.createDocumentFragment(), i;
    function create(d) {
        return (function _(_instr, _d, _key, _n) {
            var tag = null, i;
            if ('tag' in _instr) {
                tag = document.createElement(_instr.tag);

                tag.innerHTML = 'content' in _instr && !!_instr.content ? _instr.content : typeof _d == 'string' ? _d : '';

                if ('attributes' in _instr) 
                    for (i in _instr.attributes)
                        tag.setAttribute(i, _instr.attributes[i]);

                if ('events' in _instr)
                    for(i in _instr.events)
                        tag.addEventListener(i,_instr.events[i], false);

                //recur finally
                if ('children' in _instr) {
                    for (i in _instr.children){
                        _(_instr.children[i], _d[i], i, tag);
                    }
                }
                !!_n && _n.appendChild(tag);
            }
            return tag;
        })(instr, d, null);

    }
    return (function (){
        for (i in data) {
            n.appendChild(create(data[i]));
        }
        return n;
    })();
}



  1. Hoe de nieuwste versie van mongodb-clients op Ubuntu te installeren?

  2. MongoDB sorteren op bestaat alleen invoer, sleutel met waarde eerst en sleutel met null of niet bestaat als laatste

  3. mongo db ontwerp van volgende en feeds, waar moet ik insluiten?

  4. MongoDB Scala - document opvragen voor een specifieke veldwaarde