Json 将mustache.js与编号数组一起使用

Json 将mustache.js与编号数组一起使用,json,mustache,Json,Mustache,我的JSON数据源如下所示: {"1":{ "name":"One", "color":"red" }, {"2":{ "name":"Two", "color":"green" } 我正在尝试使用mustache.js循环浏览这些记录 var model = [{"1":{"name":"One","color":"red"},{"2":{"name":"Two","color":"green"}]; var template = '<ul> {{

我的JSON数据源如下所示:

{"1":{
    "name":"One",
    "color":"red"
},
{"2":{
    "name":"Two",
    "color":"green"
}
我正在尝试使用mustache.js循环浏览这些记录

var model = [{"1":{"name":"One","color":"red"},{"2":{"name":"Two","color":"green"}];
var template = '<ul> {{#.}} <li>{{name}} -- {{color}} </li> {{/.}} </ul>';
var html = Mustache.to_html(template, model);
console.log(html);
var模型=[{“1”:{“名称”:“一”,“颜色”:“红色”},{“2”:{“名称”:“二”,“颜色”:“绿色”}];
var template='
    {{{}.}
  • {{{name}--{{color}}
  • {{/}
; var html=Mustache.to_html(模板、模型); log(html);
但我不知道如何获取名称和颜色。有什么想法吗

var model = [ 
             {"1":{"name":"One","color":"red"}},
             {"2":{"name":"Two","color":"green"}}
            ];
var model4view = {dots:
    model.map(function(obj){
        var v; for (k in obj) {v = obj[k];}; return v; })};

template = "'<ul> {{#dots}} <li>{{name}} -- {{color}} </li> {{/dots}} </ul>'";
var html = Mustache.to_html(template, model4view);
[编辑] 如果还需要输出与每个项目关联的数字,可以使用映射功能:

function(v){
    for (var property in v) { 
      o = v[property];
      o['id'] = property;
      return(o); 
  }});
这样,可以在模板中使用编号作为
{{id}


在这里,您可以尝试使用解决方案。

如果您知道模型中的关键点看起来总是像1,2,3,…,那么这里是最简单的解决方案:

var model = [{"1":{"name":"One","color":"red"}},{"2":{"name":"Two","color":"green"}}];
var i, len = model.length;
for (i=0; i<len; i++) {
  model[i] = model[i][i+1];
}
var模型=[{“1”:{“名称”:“一”,“颜色”:“红色”}、{“2”:{“名称”:“二”,“颜色”:“绿色”}];
var i,len=模型长度;

对于(i=0;i来说,如果您有这样的对象数组,并使用一个简单的
{{{{{{}.}
  • {{{name}}--{{color}
  • {{/}
    循环,就会容易得多:

    var myCars = 
    [
    {"index":1,"name":"One", "color":"red" }},
    {"index":2,"name":"Two", "color":"green" }}
    ];
    
    但是,让我们努力破解它,如果您不想更改数组内容或遍历数组,此巫术可能会对您有所帮助:

    示例如下:

    您的HTML将是:

    <div id="carsContainer">
    
    </div>
    
    <script id="carsTemplate" type="text/plain">
        <ul> 
            {{#cars}} 
                {{#cars.getNextCar}}
                <li>{{name}} -- {{color}}</li>
                {{/cars.getNextCar}}
            {{/cars}}
        </ul>
    </script>
    
    
    
      {{{汽车} {{{cars.getNextCar}
    • {{name}}--{{color}
    • {{/cars.getNextCar} {{/cars}
    请注意,方法
    getNextCar
    将在对象中创建一个迭代器,因此,如果您使用多次,则必须获取一个新的迭代器。或者按照其他建议更改数组内容


    另一方面,您可能想看看哪一个更健壮,语法更灵活。

    只需编辑链接,并展示如何为输出保留项目编号。我将报告一个类似的情况,最终他们会更改数据返回方式,以使mustache模板工作。代码干净简单,但JSON不是.Nam虽然在JS中完全有效,但使用数字来修改变量从来都不是一件好事。您可以轻松删除“1”和“2”,并让代码按照下面的答案工作。如果您没有修改JSON的权限,您可以在将模型传递给d4kris提到的Mustach之前修剪模型。
    var myCars = 
    [
    {"1":{ "name":"One", "color":"red" }},
    {"2":{ "name":"Two", "color":"green" }}
    ];
    
    // decorate the array with method supporting the exotic indexing
    myCars.getNextCar = function(){ 
        !myCars.i ? myCars.i=1 : ++myCars.i;
        return(myCars[myCars.i-1][myCars.i])
    };
    
    var template = $("#carsTemplate").html();
    
    $("#carsContainer").html(Mustache.render(template,{cars:myCars}));
    
    <div id="carsContainer">
    
    </div>
    
    <script id="carsTemplate" type="text/plain">
        <ul> 
            {{#cars}} 
                {{#cars.getNextCar}}
                <li>{{name}} -- {{color}}</li>
                {{/cars.getNextCar}}
            {{/cars}}
        </ul>
    </script>