2012-03-14 10 views
0

アプリケーションでバックボーン、require.js、coffeescriptを使用しています。私のアプリをプログラミングすると、私はビューに問題があることを発見しました。私の英語のために申し訳ありません! =)バックボーン多数のイベントが同じロードビューで起動しました

私のDOMがある:私のアプリの

<div id="header"></div> 
<div id="container"></div> 

パート:

ルータ(「メッセージでIインスタンスおよびコール:

class AppRouter extends Backbone.Router 
    routes: 
     '': 'home' 
     'u/:user': 'user' 
     'events: 'events' 
     'messages': 'messages' 

    events:() -> 
     events = new EventsView 
     events.events() 
    messages:() -> 
     messages = new MessagesView 
     messages.messages() 

class MessagesView extends Backbone.View 
    template: window.Handlebars.compile MessagesTpl 
    el : '#container' 
    events : 
     'click #test' : 'test' 

    test:() -> 
     console.log 'test' 

    messages:() -> 
     #fecth and bind render method on 'all' 

class EventsView extends Backbone.View 
    template: window.Handlebars.compile EventsTpl 
    el : '#container' 

    events:() -> 
     #fetch and bind render method on 'all' 

私は次のような問題を持っています")messagesView、私はフェッチを行い、レンダリングは正常に動作します。その後、ルータが別のルート(「イベント」)に移動してイベントビューを呼び出すと、同じことが起こり、ビューが正しくレンダリングされます。

しかし、経路 "メッセージ"で再度ナビゲートすると、イベント "テスト"が2回実行されます。 、各インスタンスにつき1回!

私がルータ$( "#container")を呼び出した場合、以前のインスタンスMessagesviewが問題を解決しましたが、私の解決策が本当に良いかどうかはわかりません。

私の恐れは、DOMが悪くなり負荷が高いということです。あなたはこれで何ができるのか知っていますか?

非常にありがとうございます!アルゼンチンからの挨拶!

アレハンドロ

答えて

1

あなたのソリューションは結構です、あなただけのアンバインドとイベントを再結合している、問題になることはありません。同じdom要素を使用するため、ビューを再度レンダリングする必要がありますが、通常はそれほど重すぎるわけではありません。私は同じソリューションを使用しました。

また、MessagesViewとEventsViewにdomエレメントを別々に設定して、ユーザーが初めてルートに行くときにビューを作成することもできます。次に、現在のルートに応じてDOM要素を常に非表示にします。

+0

非常に感謝!すばらしいです ! =) – AleVasta

関連する問題