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

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 のバッジ番号を更新できます。

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 に答える