sql >> データベース >  >> NoSQL >> MongoDB

動的サーバー応答のバインド(ネストされたjson)

    結局のところ、変更されるのは、命令の使用方法と拡張方法だけです。これらは前のものとは少し異なりますが、重要なことの1つは、appendChild 内部であってはなりません 命令属性はノードに対してループしますが、ノードの直後です。いくつかの特別な属性、おそらくclassにも注意を払う必要があります 知っているのはそれだけではありません:)...内部のfor blockを完全に置き換えてみてください 次のように:

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

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

    更新

    これで、出力は正確に期待どおりになります。 classを処理する愚かなバグも修正しました 属性。試してみてください。おそらく他の入力でも、一部のデータにnullではなくテキストを入れようとしましたが、問題ないように見えます。またね!

    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リポジトリを使用してオプションのクエリパラメータを追加します

    2. MongoDBクエリで変数を使用する方法は?

    3. オブジェクトの配列をKeyValueに投影します

    4. 配列内の複数のObjectIDについてMongoDBをクエリします