骨干事件未按预期触发

时间:2013-07-10 09:31:35

标签: jquery backbone.js coffeescript backbone-events

我初始化视图:

notifications = new tvr.notifications.Collection
notifications.fetch()
new tvr.notifications.View collection:notifications

我将“通知”添加到主干集合中:

notifications =  new tvr.notifications.Collection
notifications.fetch()
notifications.create html:this_notification

notifications.coffee

    class Notifiction extends Backbone.Model
    class Notifictions extends Backbone.Collection
        model = Notifiction
        localStorage: new Backbone.LocalStorage 'tvr.notifications'


    class NotificationView extends Backbone.View
        initialize: ->
            @listenTo @collection, "add", @update

        update: ->
            alert "update"

    namespace 'tvr.notifications', (exports) ->
        exports.Model = Notifiction
        exports.Collection = Notifictions
        exports.View = NotificationView

永远不会调用此事件,我可以看到集合中创建的对象。

我只是想知道何时添加或从集合中删除新的,所以我可以更新HTML中的徽章编号。

1 个答案:

答案 0 :(得分:1)

您正在尝试将"Add"事件绑定到函数调用,这是不可能的。您需要将事件绑定到函数引用,Backbone的事件机制将调用代表您引用的函数。不使用alert,这里是一个差异的示例(在JavaScript中)。

要调用的功能

var myFunc = function() {
    alert("happy days");
}

非法

notifications.on("add", myFunc());

<强>法律

notifications.on("add", myFunc);

所以你可以在你的例子中看到你试图调用alert函数并在使用"happy days"绑定它时传递on的参数。这是不允许的。

但是,如果您编写一个无参数函数来包装您想要调用的代码,例如在上面的myFunc示例中并将其分配给变量或其他对象,则可以将事件绑定到函数的参考。然后,这应该按照您期望的方式运行。

最后,您应该使用listenTo绑定事件,而不是on。这是出于SO已经讨论过的原因。如需进一步参考,请阅读以下内容:

Difference between ListenTo and on

Backbone js .listenTo vs .on