【问题标题】:Backbone listener events not working骨干侦听器事件不起作用
【发布时间】:2013-06-30 23:43:40
【问题描述】:

我有两个集合 People 和 Teams。

如果有人添加到 People 集合中,我希望 Teams 集合收听。

但是,我不断收到此错误: 未捕获的类型错误:无法读取未定义的属性“_listenerId”

也许我误解了 bind 和 listenTo 的概念?下面是我用于这两个集合的代码。

        var People = Backbone.Collection.extend({

            url: '/people',

            model: Person,

            comparator: 'id',

            initialize: function() {

                //Why does this return '_listenerID of undefined'
                this.bind('add', function() {
                    var teams = new Teams;
                    teams.render;
                });

            },

        });


        var Teams = Backbone.Collection.extend({

            url: '/team',

            model: Team,

            comparator: 'id',

            initialize: function() {

                this.listenTo(People.collection, 'add', this.render);

            },

            render: function() {

                console.log("POOP")

            }

        });

【问题讨论】:

  • console.log("POOP") 我以为只有我一个...

标签: events backbone.js bind


【解决方案1】:

您确实误解了侦听器的工作方式。你应该特别听一些对象(即一个类的实例)。

在这里,Backbone 尝试访问 Backbone 对象 listenerId 的私有属性以执行一些内部绑定工作。在您的情况下,它正在尝试获取People.collection._listenerIdPeople 是你的类,它没有任何 collection 属性,所以 People.collection 是未定义的,因此你的错误。

这些是您的问题的基础。由于尚未完全了解您的课程与您正在尝试做的事情之间的联系,我现在不会再进一步​​了。

【讨论】:

  • 嗯嗯好的。嗯,好的,所以我需要听一堂课的实例……而不仅仅是一般的课?
  • 另外,我现在明白People 没有collection 属性。但是,如果我创建了var people = new Peoplepeople.collection 会起作用吗?
  • 现在可以工作了 :) 当我看到有人调用 this.model 的其他代码时,我感到很困惑——我想在调用集合时我必须同样具体,因此使用People.collection 的——但弄清楚 Backbone 比我聪明得多:p
  • @JIGGABITS 如果你看到类似this.collection 的东西,它可能来自两件事:一个代表集合的视图(然后你可以像那样访问集合),或者一个模型(你可以访问收集模型是这样的)。 (或定制的东西。)我想你已经弄清楚了其余的问题:p
  • 第一个参数获取未定义变量时同样的错误...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多