2017-08-11 8 views
0

私は、ヘッダがレンダリングされた後でdivをサイズ変更するためにいくつかのコードを実行しようとしています。私はここでの答えとバックボーンのドキュメントを見てきました。これは私が書いたものです:レンダリング機能をオーバーライドしたバックボーンビューで子ビューが失われる

Backbone.View.extend({ 
    template: header_tpl, 
    render: function() { 
     this.$el.html(this.template({}); 

     setTimeout(function() { 
      $(window).on("resize",function(){ 
       $(".somediv").height($(".someotherdiv").height()) 
      }) 
      .resize() 
     }, 0); 

     return this; 
    }, 
    childViews: { 
     // Some childViews in here 
    } 
}); 

この動作はしますが、このビューのchildViewsはレンダリングされません。私はそれがthis.template()に渡されている空のオブジェクトと関係していると思います。バックボーンのドキュメントはthis.model.attributesを渡すと言っていますが、このビューにはモデルはありません。データが渡されていないシンプルなヘッダーです。

+0

これはBackbone.Viewか他の何人かの子供ですか?ビューのコードをもっと表示できますか –

+0

Backbone.View.extend()の内部 –

+0

@CoryDanielsonコードを追加しました –

答えて

1

@CoryDanielsonのコメントで指摘されているように、Backboneには「childViews」のデフォルト処理はありません。あなたの仕事がバックボーン・ビューを子ビューのレンダリングにすることであれば、これを行うには合理的に簡単な方法がたくさんあります。

しかし、あなたが実際にやろうとしているのは、あらかじめ組み込まれているrenderの機能をコードベースのどこかに入れておくことです。あなたが必要と思われる唯一の拡張子はwindowresizeイベントをつけることです。renderメソッドでこれをしないのが最善の選択肢です。コードベースのどこかにあらかじめ構築されているものを引き続き使用できます。

Backbone.View.extend({ 
    template: header_tpl, 
    // no override of render 
    initialize: function() { 
    setTimeout(function() { 
     $(window).on("resize",function(){ 
      $(".somediv").height($(".someotherdiv").height()) 
     }) 
     .resize() 
    }, 0); 
    }, 
    childViews: { 
    // Some childViews in here 
    } 
}); 

このコードでは、ビューがインスタンス化されたときにイベントがアタッチされ、各レンダリングではアタッチされません。

もちろん、コードベースでもデフォルトのinitializeメソッドを変更している場合は、わかりません。その場合、拡張するだけでデフォルトのメソッド(initializerender、...)をオーバーライドするいくつかのオプションがあるかもしれませんが、フードの下で古いメソッドを呼び出すこともできます。

+0

が表示されます。私はSuiteCommerce AdvancedのためにNetsuiteによって管理されるBackboneの実装に取り​​組んでいます。彼らはこのカスタムchildViewsを作成しているに違いありません。私はソースコードで見つけようとしています。 SCAは大規模で、私はその一部しか見ることができませんでした。 –

+0

あなたは100%正しいです。 SCAには、バックボーン・エキストラのモジュールがあり、デフォルトのBackbone.View.renderをオーバーライドしています。 –

+0

推測がうまくいったときにうまくいきます:)また、それらが 'initialize'メソッドをオーバーライドしているかどうかチェックしてください。カスタマイズがあなたのサイズ変更関数に合う場所に残っていない場合、 'render'(または何でも)をオーバーライドする良い方法がいくつかありますが、依然としてオーバーライド内のデフォルトを呼び出します。あなたがそれについて何か考えが必要な場合は私に教えてください... – arbuthnott

関連する問題