2012-01-31 10 views
5

私はbackbone.jsアプリケーションを開発しており、アプリケーションの各部分を表す多数のルータとビューを持っているところに達しています。以下の単純化されたルータの例では、私は2つの場所を持っています。 account & usersbackbone.jsでビューをクリーニングしますか?

各場所の両方のビューで、内容が相互の要素(#appcontainer)にレンダリングされます。私の常識では、それぞれのビューをremoveに確実にしてから、バインディングやDOMなどの衝突を防ぐために別のビューを起動する必要があります。

ビューがすでに作成されているかどうかはわかりませんが、previousView.remove()をルータまたはビューから明示的に呼び出すことはできません。

各ビューのコンストラクタに$(this.el).empty()を追加して、DOMの最終バインディングと要素をすべて除去するだけで十分ですか?

ここにルータの例がありますか?

var myRouter = Backbone.Router.extend({ 

    routes: { 
     "account": "account", 
     "users": "users" 
    }, 

    account: function() { 
     view = new AccountView({}); 
     view.render(); 
    }, 

    users: function() { 
     view = new UserView({}); 
     view.render(); 
    } 

}); 

答えて

11

私は本当に簡単な実装を持って、私はちょうど今、私のアプリケーションを起動することだし、これは長期的にホールドアップするために起こっているか知っているが、それは次のようになりません。

編集:全体のファイルは次のようになります。 this.renderはmyRouterの別の関数になります。

var myRouter = Backbone.Router.extend({ 
    routes: { 
     'path/to/account' : 'account', 
     'path/to/users': 'users' 
    } 

    account: function() { 
     view = new AccountView({}); 
     this.render(view); 
    }, 

    users: function() { 
     view = new UserView({}); 
     this.render(view); 
    }, 

    render: function (view) { 
     //Close the current view 
     if (this.currentView) { 
      this.currentView.remove(); 
     } 

     //render the new view 
     view.render(); 

     //Set the current view 
     this.currentView = view; 

     return this; 
    } 
}); 
+0

こんにちは!ご回答有難うございます。 jQueryの '.remove()'メソッドを実行すると、ビューのバックボーン '.remove()'から自分自身が分離されますか? – Industrial

+2

バックボーンの.remove()は、jqueryの.remove()のエイリアスに過ぎません。 – MrGrigg

+1

@MrGrigg **レンダリングメソッドがどこに行くのかを明確にすることはできますか?それはルータ自体に入るように見えますが、私は確信しています... ** _私はこのコードの外観が本当に好きです。そして、一見すると、それはアプリケーションを構築する良い方法であるようです。 – Emerson

関連する問題