Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带下划线和主干的JSON对象树递归_Javascript_Jquery_Backbone.js_Underscore.js - Fatal编程技术网

Javascript 带下划线和主干的JSON对象树递归

Javascript 带下划线和主干的JSON对象树递归,javascript,jquery,backbone.js,underscore.js,Javascript,Jquery,Backbone.js,Underscore.js,假设我有一个json对象,其嵌套数组的深度未知。我想将每个数组馈送到一个u.template函数中。例如,我的json对象可能如下所示: $start_elements = array ( array( "elementTag"=>"li", "elementClass"=>"dashboard", "elementContent"=>array( "elem

假设我有一个json对象,其嵌套数组的深度未知。我想将每个数组馈送到一个u.template函数中。例如,我的json对象可能如下所示:

$start_elements = array (
        array(
            "elementTag"=>"li",
            "elementClass"=>"dashboard",
            "elementContent"=>array(
                "elementTag"=>"a",
                "elementContent"=>"Dashboard",
                "href"=>"#home"
                ) 
        ),
        array(
            "elementTag"=>"li", 
            "elementClass"=>"count indicator", 
            "elementContent"=>array(
                array(
                    "elementTag"=>"span", 
                    "elementClass"=>"data-count='8'", 
                    "elementContent"=>"Notifications"
                ), 
                array(
                    "elementTag"=>"ul", 
                    "elementClass"=>" ",
                    "elementContent"=>array(
                        "elementTag"=>"li", 
                        "elementContent"=>array(
                            "elementTag"=>"a",
                            "href"=>"#", 
                            "elementExtra"=>"data-modal",
                            "elementContent"=>array(
                                array(
                                    "elementTag"=>"h4",
                                    "elementContent"=>"Lorem Ipsum"
                                    ), 
                                array(
                                    "elementTag"=>"<p>",
                                    "elementContent"=>"Lorem ipsum dolor sit imet smd ddm lksdm lkdsm"
                                )
                            )
                        )
                    )
                )
            )
        )
);
json_encode($start_elements);
$start\u elements=数组(
排列(
“elementTag”=>“li”,
“elementClass”=>“仪表板”,
“elementContent”=>数组(
“elementTag”=>“a”,
“elementContent”=>“仪表板”,
“href”=>“#主页”
) 
),
排列(
“elementTag”=>“li”,
“elementClass”=>“计数指示器”,
“elementContent”=>数组(
排列(
“elementTag”=>“span”,
“elementClass=>“数据计数=”8',
“elementContent”=>“通知”
), 
排列(
“elementTag”=>“ul”,
“elementClass=>”,
“elementContent”=>数组(
“elementTag”=>“li”,
“elementContent”=>数组(
“elementTag”=>“a”,
“href”=>“#”,
“elementExtra”=>“数据模式”,
“elementContent”=>数组(
排列(
“elementTag”=>“h4”,
“elementContent”=>“Lorem Ipsum”
), 
排列(
“elementTag”=>“”,
“elementContent”=>“Lorem ipsum dolor sit imet smd ddm lksdm lksdm”
)
)
)
)
)
)
)
);
json_编码($start_元素);
_.模板:

_.template('<<%= elementTag %> class="<%= elementClass %>" href="<%= href %>"><%= elementContent %></<%= elementTag %>')

\uuu.template(“您可以执行以下操作:

function applyTemplate(obj){ if _.has(obj, "elementContent"){ obj.elementContent = applyTemplate(obj.elementContent) } return _.template("templateString", obj) } 函数applyTemplate(obj){ 如果有(对象,“元素内容”){ obj.elementContent=applyTemplate(obj.elementContent) } return.template(“templateString”,obj) }
基本上,您可以遍历整个树,将
elementContent
替换为从下到上的模板值。

我会在模板周围创建一个包装函数,以保持模板的无逻辑性。然后您可以使用下划线的实用方法检查是否有数组、对象(或字符串)(
.isArray
.isObject
)在您的手中

您需要将包装器函数传递到模板中,以便使用它。您可以使用
{tmpl:tmpl}
扩展数据

下面是一个简化的工作示例:

    var data = {
    elementTag: "li",
    elementContent: [{
        elementTag: "a",
        elementContent: "Dashboard"
    }, {
        elementTag: "div",
        elementContent: "Hello"
    }]
};

var tmpl = _.template('<<%= elementTag %>><%= template(elementContent) %></<%= elementTag %>>');

function template(elData) {
    var html = "";
    if (_.isArray(elData)) {
        _.each(elData, function (el) {
            html += template(el);
        });
    } else if (_.isObject(elData)) {
        html = tmpl(_.extend({
            template: template
        }, elData));
    } else {
        html = elData;
    }
    return html;
}

console.log(template(data));
var数据={
元素标签:“li”,
元素内容:[{
元素标签:“a”,
elementContent:“仪表板”
}, {
元素标签:“div”,
元素内容:“你好”
}]
};
var tmpl=389;.template(“”);
功能模板(elData){
var html=“”;
如果(u.isArray(elData)){
_.每个(elData,功能(el){
html+=模板(el);
});
}否则如果(u.isObject(elData)){
html=tmpl(u.extend({
模板:模板
},elData));
}否则{
html=elData;
}
返回html;
}
console.log(模板(数据));

这个循环会发生吗?我似乎无法让它工作,但我认为它可能只是试图返回模板中最深的对象…我应该工作,我没有测试它,但它会通过all树,然后替换所有
元素内容
并在对象中替换它们。请注意,您的示例并不表示树,而是表示st确认。如果elementContent中的子元素是数组而不是对象,会发生什么情况?(请参见上面编辑的答案)。数组中是否应该出现某种形式的u.每次迭代?然后将
obj.elementContent=applyTemplate(obj.elementContent)
替换为
obj.elementContent=obj.elementContent.map(函数(obj1){return applyTemplate(obj1.elementContent)}
这不是JSON,我也看不到任何数组。如果elementContent中的子元素是数组而不是对象,会发生什么情况?(请参见上面编辑的答案)。数组的情况下是否应该有某种1。每次迭代都会发生?