首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >backbone +布局管理器(backbone-样板)集合在beforeRender中为空

backbone +布局管理器(backbone-样板)集合在beforeRender中为空
EN

Stack Overflow用户
提问于 2013-04-03 00:36:05
回答 1查看 888关注 0票数 0

我正在做一个项目来测试这个backbone-boilerplate (https://github.com/tbranyen/backbone-boilerplate),但是我在渲染视图时遇到了问题。我第一次调用beforeRender时,集合(图片)是空的,因为获取Flickr照片的过程还在进行中。但是当数据加载后,我可以在我的Pics.Collection的“解析”函数中看到它们(带有断点),我的视图的beforeRender再也不会被调用了。

我的router.js:

代码语言:javascript
复制
 define([
    // Application.
    "app",

    "modules/pics"
],

function(app, HomePage, Pics) {

    // Defining the application router, you can attach sub routers here.
    var Router = Backbone.Router.extend({
        initialize: function() {
            // Init collections
            var collections = {
                pics: new Pics.Collection()
            };
            console.log('collec');
            // Register in the router
            _.extend(this, collections);
        },

        routes: {
            "": "pics"
        },

        pics: function() {
            this.reset();

            app.useLayout().setViews({
                "#content": new Pics.Views.List({ pics: this.pics }),
                "header": new Backbone.View({
                    tagName: "span",
                    beforeRender: function() {
                        this.$el.html("Header Pics");
                    }
                })
            }).render();

            this.pics.fetch();
        },

        reset: function() {
            if (this.pics.length) {
                this.pics.reset();
            }
        }
    });

  return Router;

});

我的模块pics.js:

代码语言:javascript
复制
define([
    "app"
], function(app) {

    var Pics = app.module();

    Pics.Model = Backbone.Model.extend({ });

    Pics.Collection = Backbone.Collection.extend({
        model: Pics.Model,
        url: function() {
            return "http://api.flickr.com/services/feeds/photos_public.gne?format=json&jsoncallback=?";
        },
        cache: true,
        parse: function(obj) {
            return obj.items;
        }
    });

    Pics.Views.Item = Backbone.View.extend({
        template: "pics/item",
        tagName: "li",

        serialize: function() {
            return { model: this.model };
        },

        initialize: function() {
            this.listenTo(this.model, "change", this.render);
        }
    });

    Pics.Views.List = Backbone.View.extend({
        template: "pics/list",

        serialize: function() {
            return { collection: this.options.pics };
        },

        beforeRender: function() {
            this.options.pics.each(function(pic) {
                this.insertView("#pics-list", new Pics.Views.Item({
                    model: pic
                }));
            }, this);
        },

        initialize: function() {
            this.listenTo(this.options.pics, {
                "reset": this.render(),
                "request": function() {
                    this.$("ul").parent().html("<img src='/app/img/spinner-gray.gif'>");
                }
            });
        }
    });

    return Pics;
});

list.html (模板):

代码语言:javascript
复制
<h1>Liste des photos</h1>
<div>
    <div class="loading"></div>
    <ul id="pics-list"></ul>
</div>

item.html (模板):

代码语言:javascript
复制
<li>
    <img src="<%= model.get("link") %>" />
</li>

index.html:

代码语言:javascript
复制
<main role="main" id="main">

      <nav>
          <ul>
              <li><a href="">Home</a></li>
          </ul>
      </nav>
      <header></header>
      <aside></aside>
      <section id="content"></section>
      <footer>
          Copyright 2013
      </footer>

  </main>

两天来,我在论坛上和我自己搜索是否存在现有的问题,但我找不到哪里出了问题。

提前谢谢你,皮尔里克。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-03 04:13:28

我发现问题了,听"sync“事件而不是"change”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15769479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档