2016-03-30 32 views
0

私は、次のコードと主鎖中の項目にビューを追加しようとしています:バックボーンビューがレンダリングされているかどうかを確認する方法は?

var viewContainer = this.$el.find('.view-container'), 
    pageWrap = this.$el.nextAll(); 

FIX

{
(viewContainer.empty())場合
this.myView= new ProductsView(); 
    viewContainer.append(application.myView.render().$el), 
    console.log(myView); 
} 

私はappendinですこのビューはviewContainertoggleの機能を持っていますが、ボタンをクリックするたびに、myViewが何度も繰り返し表示されるのではなく、viewContainerに繰り返し追加されます。ビューを追加する前にビューが既にレンダリングされているかどうかを確認するにはどうすればよいですか?私が使用できるのは!this.rendered()相当ですか?

私はこれを見つけましたthreadしかし、この例で私を助けていません。

UPDATE - それのルックスからはconsole.log FROM(viewContainer)

[div.view-container.product-container.active, div#subjects_menu.view-container.product-container.hidden.active, prevObject: p.fn.p.init[1], context: undefined, selector: ".view-container"]

+0

[現在、Backbone.ViewがDOMでレンダリングされているかどうかを確認するにはどうすればよいですか?](http://stackoverflow.com/questions/12332373/how-can-i-check-if-a-backbone-ビューに現在レンダリングされているビュー) – AKS

+0

おそらく、ビューを追加する前に 'this.rendered = true; 'にアクセスする方法を教えていない可能性があります。 – HGB

+0

'viewContainer'が' viewContainer.length'ではなく子を持っているかどうかチェックしたいと思います。 if条件の中で 'viewContainer.is(:empty)'を使うことでそうすることができます。 – AKS

答えて

0

、あなたはProductsViewを確認します作成されていないiそれはすでに存在します。これを行うには

最も簡単な方法は、次のようになります。

if(!this.myView) { 
    this.myView= new ProductsView(); 
    viewContainer.append(application.myView.render().$el), 
} 

DOMを問い合わせるよりも、アプリケーションの状態で作業した方が良いです。製品ビューを削除するときは、その後this.myView = nullを実行してください。


あなたはあなたが提供する/任意のイベントをトリガしません制御することはできませんその上分離された外部アプリケーションを統合する必要があるときに、ビューがレンダリングされるかどうかを知るためにDOMを照会したいと思います唯一の時間は、おそらくですコールバックなどのレンダリング中に。

関連する問題