2012-03-27 96 views
0

我需要按部门对显示进行分组,寻找一些方法来做到这一点,但在json中找不到。 代码:Jquery中的组Json属性

$(function displays(){ 
var url = '{% url get_displays %}'; 
$.getJSON(url, function(data) { 
    var sidebar = $('.sidebar'); 
     $.each(data, function(i, c) {    
      sidebar.append('<ul>'+c.fields.setor.fields['nome']+'<li>'+c.fields['nome']+' - '+c.fields['janelas']+'</li>'+'</ul>');    
    }); ///close each   
}); ///close getJson 
}); ///close function 

的图片显示在同一setor瓦伦萨两个对象但分隔:
http://postimage.org/image/myc7xsgwh/

JSON输出:

[ 
{ 
    "pk": 2, 
    "model": "display.display", 
    "fields": { 
     "data_criacao": "2012-03-27", 
     "setor": { 
      "pk": 2, 
      "model": "display.setor", 
      "fields": { 
       "nome": "Rio de Janeiro" 
      } 
     }, 
     "janelas": 12, 
     "nome": "Restaurante" 
    } 
}, 
{ 
    "pk": 3, 
    "model": "display.display", 
    "fields": { 
     "data_criacao": "2012-03-27", 
     "setor": { 
      "pk": 1, 
      "model": "display.setor", 
      "fields": { 
       "nome": "Valença" 
      } 
     }, 
     "janelas": 12, 
     "nome": "Loja de Roupas Dimais" 
    } 
}, 
{ 
    "pk": 1, 
    "model": "display.display", 
    "fields": { 
     "data_criacao": "2012-03-27", 
     "setor": { 
      "pk": 1, 
      "model": "display.setor", 
      "fields": { 
       "nome": "Valença" 
      } 
     }, 
     "janelas": 12, 
     "nome": "Shopping" 
    } 
} 
] 

如何组中相同的“setor这两个显示器“?

编辑:

使用Django框架是可以重组的属性:

# queryset 

displays = Display.objects.filter(janelas__lte=12).select_related('setor').order_by('setor__nome') 

# template 

{% regroup displays by setor as setor_list %} 

<ul> 
{% for s in setor_list %} 
<li>{{ s.grouper }} 
<ul> 
    {% for d in s.list %} 
    <li>{{ d.nome }}</li> 
    {% endfor %} 
</ul> 
</li> 
{% endfor %} 
</ul> 

商务部:
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#regroup

也可以尝试通过jQuery来做到。
谢谢!

+0

如果你可以在服务器端做到这一点会更好。 – bfavaretto 2012-03-27 22:17:45

回答

0

您可以从现有数据的新对象

var tmp = {}; 

$.each(data, function(i, item) { 
    var nome = item.fields.setor.fields.nome; 
    if (!tmp[nome]) { 
     tmp[nome] = []; 
    } 
    tmp[nome].push(item); 

}); 

然后遍历新的对象来生成html

不知道你的通缉名单分开,所以我用H3标记,我没有包括您所分析的所有变量:

var html = []; 
$.each(tmp, function(key, item) { 
    html.push('<h3>' + key + '</h3><ul>'); 
    $.each(item, function(i, val) { 
     html.push('<li>' + 'pk:' + val.pk + ', nome:' + val.fields.nome + '</li>') 
    }) 
    html.push('</ul>'); 
}); 
$('.sidebar').append(html.join('')); 

演示:http://jsfiddle.net/xrtpD/1/

+0

感谢您的代码charlietfl! 我会很快尝试你的代码。我在服务器端完成了下面的代码。 – LinuxMan 2012-03-27 23:09:47