sql >> Databasteknik >  >> NoSQL >> MongoDB

Bindande dynamiskt serversvar (kapslade json)

I slutändan är det enda som ändras hur du vill att instruktionerna ska användas och utökas. Dessa skiljer sig lite från föregående men en viktig sak är att appendChild ska inte vara inne instruktionerna attribut loop för noden men strax efter utanför den; viss uppmärksamhet måste också ägnas några speciella attribut, kanske klass är inte den enda, vem vet :) ...försök att helt ersätta den inre för blocket med följande :

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

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

UPPDATERAD

Nu är produktionen nu exakt den förväntade. Jag fixade till och med en dum bugg som hanterade klassen attribut. Prova det, kanske till och med på andra ingångar, jag försökte lägga text istället för null på vissa data och det ser bra ut. 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. Hur man styr projektionsdefinitionen i MongoDb med C#

  2. Python-redis:hämta binär data efter att en klient konfigurerats med decode_responses=True

  3. mgo:hur man uppdaterar en specifik array i ett dokument

  4. Felsökning av mongo hittades inte och php_mongo.dll är inte ett win32-programfel