2011-12-22 68 views
4

我正在使用backbone.js創建我的應用程序如何確定視圖是否已呈現? javascript

如下所示,我有一個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(){ //頁面加載後 })? –

+0

我的解決方案對你沒有幫助嗎? – tbranyen

回答

8

您的情況就是爲什麼我寫了LayoutManager for Backbone,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

連續有兩個「新」嗎? – 2012-03-24 19:13:51

+1

不,更新。感謝帕特 – tbranyen

相關問題