2011-12-18 54 views
3

可能重複:
Using Ember.js, how do I run some js after a view is rendered?如何查看完成後運行功能呈現變化

我用JWPlayer展現在我的網站的視頻和JWPlayer使用JavaScript來創建觀衆。

我必須在隱藏視圖更改顯示後運行JWPlayer腳本。

jwplayer('video_space').setup({ 
    'flashplayer': 'player.swf', 
    'file': 'http://content.longtailvideo.com/videos/flvplayer.flv', 
    'controlbar': 'bottom', 
    'width': '470', 
    'height': '320' 
    }); 

我結合我的觀點與價值上的控制器

<script type="text/x-handlebars" > 
    {{#view Food.previewView }} 
    Video session 
    <div {{bindAttr class="showPreview"}}> 
     <div id='video_space'>Video Loading...</div> 
    </div> 
    {{#view SC.Button target="Food.appController" action="show"}} 
     show 
    {{/view}} 
    {{/view}} 
</script> 

我的JavaScript的所有控制器和視圖

Food = Ember.Application.create(); 

Food.appController = Ember.Object.create({ 
    showVideo: false, 

    show: function(){ 
     Food.previewView.set('showVideo', true); 
    } 
}); 

Food.previewView = Ember.View.extend({ 
    showVideoBinding: 'Food.appController.showVideo', 

    showPreview: function() { 
     return this.get('showVideo') ? "show" : "hide"; 
    }.property('showVideo') 
}); 

如果我跑JWPlayer腳本時變「showVideo」可變的視頻會錯誤,因爲$('#video_space')仍然隱藏。

Emberjs有一些像「afterViewChange」或「viewDidChange」的委託方法?

測試代碼 http://jsfiddle.net/apirak/Ay6Fh/

+0

看來,典型的解決方案(使用ISVISIBLE)是不可靠的,由於觀察者排序。我們將在未來幾天內修復此問題或提供明確的生命週期回調。 –

回答

1

一件事,你當你創建你的AppController,創建你需要使用的,而不是.extend .create對象時,這個錯誤是造成按鈕穿上」做了一個錯誤找到你控制器的「顯示」動作。

也就是說,你仍然可以在showVideo上爲你的動作綁定,當它發生變化時,你可以調用你的JWPlayer腳本來顯示它。

+0

感謝您的「.create」:-)但是,當「showVideo」變化時,我如何確保視圖(HTML)完全改變。 – Bank

+0

我不確定你是否可以,但是,因爲你只是在改變一個css屬性,所以我認爲只需調用JWPlayer來完成這項工作是很安全的。 –