sql >> Database teknologi >  >> NoSQL >> MongoDB

Bindende dynamisk serversvar (indlejret json)

I sidste ende er det eneste, der ændrer sig, hvordan du ønsker, at instruktionerne skal bruges og udvides. Disse er lidt anderledes end de foregående, men en vigtig ting er, at appendChild bør ikke være inde instruktionerne attributter loop for noden men lige efter uden for den; Der skal også lægges vægt på nogle specielle attributter, måske class er ikke den eneste, hvem ved :) ...prøv fuldstændig at erstatte den indre for block med følgende :

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);
}

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

OPDATERET

Nu er outputtet nu præcis det forventede. Jeg har endda rettet en dum fejl, der håndterede class attribut. Prøv det, måske endda på andre input, jeg prøvede at sætte tekst i stedet for null på nogle data, og det ser fint ud. Vi ses!

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. Mongodb gruppe og skub med tomme arrays

  2. fremskynde jokertegn-tekstopslag

  3. Mongoose async/wait find derefter redigere og gemme?

  4. Fjernelse af et objekt fra et array inde i en samling