将图像循环转换为循环,其中包含类别和图像

时间:2013-08-29 23:15:55

标签: json backbone.js

我和一位自由职业者开始了一个项目,他为我的网站前端做了BacboneJS,但他们从未完成过。我现在需要完成它,没有骨干经验。他们为我的图片库页面设置了以下代码,以循环显示所有图像并在屏幕上显示,但是我需要它来循环通过类别,然后在图像内循环,以便它们与顶部的类别标题组合在一起

我目前的代码如下:

render_gallery: function(){
     var $main=this.$el.find('.content-wrap');
     $main.html("");
     var $ul=$main.find("ul");
      _.each(this.collection.models, function(image){
        var image_link='<a class="fancybox" href="'+image.get('path')+'">'+
          '<img alt="" src="'+image.get('thumb_path')+'">'+
         '</a>';
         $main.append(image_link);
      });
      $('.fancybox').fancybox();
    }

这是从JSON数据(仅限代码段)运行的:

[{"id":"5","gallery_cat_id":"2","name":"rfg","path":"\/cms\/app\/webroot\/files\/images\/img2.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/img2.jpg","size":"149944","sort_order":"10","online":true,"created":"2013-08-16 10:24:37","modified":"2013-08-17 08:37:05"},{"id":"7","gallery_cat_id":"1","name":"","path":"\/cms\/app\/webroot\/files\/images\/p1060956.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/p1060956.jpg","size":"404269","sort_order":"1","online":true,"created":"2013-08-22 15:30:40","modified":"2013-08-22 15:30:40"},{"id":"8","gallery_cat_id":"1","name":"","path":"\/cms\/app\/webroot\/files\/images\/p1060959.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/p1060959.jpg","size":"258454","sort_order":"2","online":true,"created":"2013-08-22 15:30:57","modified":"2013-08-22 15:30:57"},

但是我现在有了这个JSON数据(仅限代码段):

[{"Restorations":[{"id":"7","gallery_cat_id":"1","name":"","path":"\/cms\/app\/webroot\/files\/images\/p1060956.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/p1060956.jpg","size":"404269","sort_order":"1","online":true,"created":"2013-08-22 15:30:40","modified":"2013-08-22 15:30:40"},{"id":"8","gallery_cat_id":"1","name":"","path":"\/cms\/app\/webroot\/files\/images\/p1060959.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/p1060959.jpg","size":"258454","sort_order":"2","online":true,"created":"2013-08-22 15:30:57","modified":"2013-08-22 15:30:57"},{"id":"9","gallery_cat_id":"1","name":"","path":"\/cms\/app\/webroot\/files\/images\/p1060964.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/p1060964.jpg","size":"309197","sort_order":"3","online":true,"created":"2013-08-22 15:31:10","modified":"2013-08-22 15:31:10"},{"id":"10","gallery_cat_id":"1","name":"","path":"\/cms\/app\/webroot\/files\/images\/p1060972.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/p1060972.jpg","size":"195725","sort_order":"4","online":true,"created":"2013-08-22 15:31:49","modified":"2013-08-22 15:32:40"},{"id":"11","gallery_cat_id":"1","name":"","path":"\/cms\/app\/webroot\/files\/images\/p1070598.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/p1070598.jpg","size":"229989","sort_order":"5","online":true,"created":"2013-08-22 15:32:02","modified":"2013-08-22 15:32:02"},{"id":"12","gallery_cat_id":"1","name":"","path":"\/cms\/app\/webroot\/files\/images\/p10705991.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/p10705991.jpg","size":"250559","sort_order":"6","online":true,"created":"2013-08-22 15:32:14","modified":"2013-08-22 15:32:14"},{"id":"13","gallery_cat_id":"1","name":"","path":"\/cms\/app\/webroot\/files\/images\/pic_3.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/pic_3.jpg","size":"191162","sort_order":"7","online":true,"created":"2013-08-22 15:32:27","modified":"2013-08-22 15:32:27"}],"Second Category - Sample":[{"id":"5","gallery_cat_id":"2","name":"rfg","path":"\/cms\/app\/webroot\/files\/images\/img2.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/img2.jpg","size":"149944","sort_order":"10","online":true,"created":"2013-08-16 10:24:37","modified":"2013-08-17 08:37:05"},{"id":"14","gallery_cat_id":"2","name":"","path":"\/cms\/app\/webroot\/files\/images\/tlbday3.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/tlbday3.jpg","size":"25207","sort_order":"2","online":true,"created":"2013-08-23 14:20:04","modified":"2013-08-23 14:20:04"},{"id":"16","gallery_cat_id":"2","name":"","path":"\/cms\/app\/webroot\/files\/images\/partyhats.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/partyhats.jpg","size":"12955","sort_order":"0","online":true,"created":"2013-08-23 14:20:44","modified":"2013-08-23 14:20:44"},{"id":"18","gallery_cat_id":"2","name":"","path":"\/cms\/app\/webroot\/files\/images\/hrc_syd_a5_happyhour_low.jpg","thumb_path":"\/cms\/app\/webroot\/files\/images\/thumbs\/hrc_syd_a5_happyhour_low.jpg","size":"205515","sort_order":"0","online":true,"created":"2013-08-23 14:21:55","modified":"2013-08-27 17:16:28"}]}]

恢复是第一个带有图像的类别。

我猜我需要以某种方式在执行_each之前添加一个初始循环,但我无法确定从哪里开始或如何解决这个问题。有人能指出我正确的方向吗?

MY GALLERY MODEL CODE

$(function() {
window.app = window.app || { };

    window.app.Gallery = Backbone.Model.extend({
        urlRoot: 'cms/gallery_cats',
        defaults: {
            id: "",
            description: ""
        },
        initialize: function(){
          this.on('change',function(model){
            // alert(this.get('description'));
          });
        },
        parse : function(resp) {
           return resp;
        }
    });

    window.app.GalleryCollection = Backbone.Collection.extend({
       url: 'cms/gallery_cats',
       model: app.Gallery
    });
});

画廊视图代码

$(function() {
window.app = window.app || { };

    window.app.Gallery = Backbone.Model.extend({
        urlRoot: 'cms/gallery_cats',
        defaults: {
            id: "",
            description: ""
        },
        initialize: function(){
          this.on('change',function(model){
            // alert(this.get('description'));
          });
        },
        parse : function(resp) {
           return resp;
        }
    });

    window.app.GalleryCollection = Backbone.Collection.extend({
       url: 'cms/gallery_cats',
       model: app.Gallery
    });
});

三江源

3 个答案:

答案 0 :(得分:2)

我相信你想添加一个额外的_each,并略微改变现有的_each。如果此代码不是100%,请道歉,因为它可能需要调整以适合您的数据;

  // Loop through your data, as each category
  _.each(this.collection.models, function(category){


        // Loop through each image within the category 
        _.each(category, function(image){

              // Output your image
              var image_link='<a class="fancybox" href="'+image.get('path')+'">'+
                    '<img alt="" src="'+image.get('thumb_path')+'">'+
                    '</a>';
              $main.append(image_link);

        });

  });

为了更好地解释一下,你想要从循环改变只是图像;

[
    {
        "id": "5",
        "gallery_cat_id": "2",
        "name": "rfg",
        "path": "/cms/app/webroot/files/images/img2.jpg",
        "thumb_path": "/cms/app/webroot/files/images/thumbs/img2.jpg",
        "size": "149944",
        "sort_order": "10",
        "online": true,
        "created": "2013-08-16 10:24:37",
        "modified": "2013-08-17 08:37:05"
    },
    {
        "id": "7",
        "gallery_cat_id": "1",
        "name": "",
        "path": "/cms/app/webroot/files/images/p1060956.jpg",
        "thumb_path": "/cms/app/webroot/files/images/thumbs/p1060956.jpg",
        "size": "404269",
        "sort_order": "1",
        "online": true,
        "created": "2013-08-22 15:30:40",
        "modified": "2013-08-22 15:30:40"
    },
    {
        "id": "8",
        "gallery_cat_id": "1",
        "name": "",
        "path": "/cms/app/webroot/files/images/p1060959.jpg",
        "thumb_path": "/cms/app/webroot/files/images/thumbs/p1060959.jpg",
        "size": "258454",
        "sort_order": "2",
        "online": true,
        "created": "2013-08-22 15:30:57",
        "modified": "2013-08-22 15:30:57"
    }
]

...循环遍历每个类别,然后是该类别中的每个图像;

[
    {
        "Restorations": [
            {
                "id": "7",
                "gallery_cat_id": "1",
                "name": "",
                "path": "/cms/app/webroot/files/images/p1060956.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/p1060956.jpg",
                "size": "404269",
                "sort_order": "1",
                "online": true,
                "created": "2013-08-22 15:30:40",
                "modified": "2013-08-22 15:30:40"
            },
            {
                "id": "8",
                "gallery_cat_id": "1",
                "name": "",
                "path": "/cms/app/webroot/files/images/p1060959.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/p1060959.jpg",
                "size": "258454",
                "sort_order": "2",
                "online": true,
                "created": "2013-08-22 15:30:57",
                "modified": "2013-08-22 15:30:57"
            },
            {
                "id": "9",
                "gallery_cat_id": "1",
                "name": "",
                "path": "/cms/app/webroot/files/images/p1060964.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/p1060964.jpg",
                "size": "309197",
                "sort_order": "3",
                "online": true,
                "created": "2013-08-22 15:31:10",
                "modified": "2013-08-22 15:31:10"
            },
            {
                "id": "10",
                "gallery_cat_id": "1",
                "name": "",
                "path": "/cms/app/webroot/files/images/p1060972.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/p1060972.jpg",
                "size": "195725",
                "sort_order": "4",
                "online": true,
                "created": "2013-08-22 15:31:49",
                "modified": "2013-08-22 15:32:40"
            },
            {
                "id": "11",
                "gallery_cat_id": "1",
                "name": "",
                "path": "/cms/app/webroot/files/images/p1070598.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/p1070598.jpg",
                "size": "229989",
                "sort_order": "5",
                "online": true,
                "created": "2013-08-22 15:32:02",
                "modified": "2013-08-22 15:32:02"
            },
            {
                "id": "12",
                "gallery_cat_id": "1",
                "name": "",
                "path": "/cms/app/webroot/files/images/p10705991.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/p10705991.jpg",
                "size": "250559",
                "sort_order": "6",
                "online": true,
                "created": "2013-08-22 15:32:14",
                "modified": "2013-08-22 15:32:14"
            },
            {
                "id": "13",
                "gallery_cat_id": "1",
                "name": "",
                "path": "/cms/app/webroot/files/images/pic_3.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/pic_3.jpg",
                "size": "191162",
                "sort_order": "7",
                "online": true,
                "created": "2013-08-22 15:32:27",
                "modified": "2013-08-22 15:32:27"
            }
        ],
        "Second Category - Sample": [
            {
                "id": "5",
                "gallery_cat_id": "2",
                "name": "rfg",
                "path": "/cms/app/webroot/files/images/img2.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/img2.jpg",
                "size": "149944",
                "sort_order": "10",
                "online": true,
                "created": "2013-08-16 10:24:37",
                "modified": "2013-08-17 08:37:05"
            },
            {
                "id": "14",
                "gallery_cat_id": "2",
                "name": "",
                "path": "/cms/app/webroot/files/images/tlbday3.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/tlbday3.jpg",
                "size": "25207",
                "sort_order": "2",
                "online": true,
                "created": "2013-08-23 14:20:04",
                "modified": "2013-08-23 14:20:04"
            },
            {
                "id": "16",
                "gallery_cat_id": "2",
                "name": "",
                "path": "/cms/app/webroot/files/images/partyhats.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/partyhats.jpg",
                "size": "12955",
                "sort_order": "0",
                "online": true,
                "created": "2013-08-23 14:20:44",
                "modified": "2013-08-23 14:20:44"
            },
            {
                "id": "18",
                "gallery_cat_id": "2",
                "name": "",
                "path": "/cms/app/webroot/files/images/hrc_syd_a5_happyhour_low.jpg",
                "thumb_path": "/cms/app/webroot/files/images/thumbs/hrc_syd_a5_happyhour_low.jpg",
                "size": "205515",
                "sort_order": "0",
                "online": true,
                "created": "2013-08-23 14:21:55",
                "modified": "2013-08-27 17:16:28"
            }
        ]
    }
]

答案 1 :(得分:1)

我最终按照以下方式开始工作:

_.each(this.collection.models, function(group){
        _.each(group.attributes,function(image_category,index){
            console.log(image_category);
            //Following code is quick fix for getting categiry name, but will be replaced later.
            $main.append('<h4 style="float: left; margin-bottom: 15px;">'+index+'</h4><br clear="left">');
             _.each(image_category,function(image){
              var link='<a href="'+image.path+'" class="fancybox" rel="'+index+'"><img class="gallery_thumb" src="'+image.thumb_path+'"/></a>';
              $main.append(link);
             });
             $main.append('<br/>');
        });
      });

请注意添加到image_categroy循环的索引。

由于

答案 2 :(得分:0)

无需更正_.each循环..您必须实际更新从JSON设置此视图集合的行。

你可能正在使用这个旧的json创建一个集合对象...它可能是这样的

var imageCollection = new ImageCollection(JSON);

使用新的JSON结构,它应该像这样

var imageCollection = new ImageCollection(JSON.Restorations);

PS:让我知道你的担忧......我会继续更新答案,直到你认为它有效为止。