1

我初始化视图:

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

通知.咖啡

    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 中的徽章编号。

4

1 回答 1

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 上讨论过的原因。如需进一步参考,请阅读以下内容:

ListenTo 和 on 的区别

骨干 js .listenTo 与 .on

于 2013-07-10T10:43:35.147 回答