2011-12-22 9 views
4

私はbackbone.jsを使用してアプリケーションを作成していますビューがレンダリングされているかどうかを判断する方法は? javacript

以下に示すように、私はレイアウトをレンダリングするために使用するlayoutViewとレイアウト内にミニプロファイルを持っています。

タイミングは私の問題です。私は 'renderProfile'メソッドをトリガする前に 'render'メソッドを最初に完了させる必要があります。どうやってやるの?

Onethingaday.Views.Home ||= {} 

class Onethingaday.Views.Home.LayoutView extends Backbone.View 
    template: JST["backbone/templates/home/layout"] 

    initialize: -> 
    @options.user.bind('change',@render,@renderProfile, @) 

    renderProfile: -> 
    view = new Onethingaday.Views.Shared.MiniProfileView 
     user: @options.user 

    @$('.profile').html view.render().el 

    render: -> 
    $(@el).html(@template()) 
    @ 
+0

$(document).ready(function(){ // after page loads })を使用してみましたか? –

+0

私の解決策はあなたを助けてくれませんでしたか? – tbranyen

答えて

8

バックボーン用のレイアウトマネージャhttp://github.com/tbranyen/backbone.layoutmanagerを書いたのはあなたの状況です。

メインビュー(レイアウト)からサブビューを分離する必要があります。

だからあなたのルートのコールバックで、あなたはこのようなものがあるだろう:私は、サブビューがレイアウトに関連付けられた宣言方式は非常に本当にだと思うように私は、私のライブラリを調査するためにあなたを懇願するだろう

// Initialize a Layout View 
var profile = new Onethingaday.Views.Home.LayoutView(); 
// Initialize a MiniProfile View 
var miniProfile = new Onethingaday.Views.Shared.MiniProfileView({ 
    model: user 
}); 

// This appears synchronous in your code, so this should work fine 
$(profile.render().el).find(".profile").html(miniProfile.render()); 

をエレガント。

+0

本当に2つの '新しい'が連続していますか? –

+1

いいえ、更新されました。ありがとう – tbranyen

関連する問題