2013-03-06 62 views
3

我正在被基於狀態呈現的視圖:如何處理刪除DOM效果?

{{#if boolean}} 
    {view MyView}} 
{{/if}} 

我可以很容易地添加,當元件被插入到DOM的一個不錯的動畫:

MyView: { 
    didInsertElement: function() { 
    this.$().hide().show('slide', {direction: 'left', duration: 2000}); 
    } 
} 

然而,相同的從DOM中刪除元素時無法完成:

MyView: { 
    willDestroyElement: function() { 
    this.$().hide('slide', {direction: 'right', duration: 2000}); 
    } 
} 

這不起作用,因爲該元素是基於條件tha t超出了這個視圖的控制,元素立即從DOM中被移除。異步動畫從不運行。

處理這個問題的最佳方法是什麼?

+1

D你最終解決這個問題? – 2013-04-21 19:35:23

+0

不幸沒有:( – bcardarella 2013-04-21 21:42:27

+0

還沒有進展? – shime 2013-10-25 11:34:32

回答

1

對於一個簡單的情況,您可以將您的布爾值綁定到您的視圖並觀察它,手動隱藏和顯示視圖,但否則將其留在DOM中。

0

爲什麼不按照你的看法做這樣的事情?

booleanChanged: function() { 
    var boolean = this.get('controller.boolean'); 
    if (boolean) { 
    this.$().hide().show('slide', {direction: 'left', duration: 2000}); 
    } else { 
    this.$().hide('slide', {direction: 'right', duration: 2000}); 
    } 
}.observes('controller.boolean') 

,只是在你的handelbar使用

{view MyView}} 
1

這是一個哈克解決方案,但對我的作品:

willDestroyElement: -> 
    element = @$().clone() 
    @$().replaceWith element 
    element.slideUp 250, -> 
    element.remove() 

基本上,克隆的DOM元素,讓灰燼破壞元素與視圖相關聯,並使用克隆進行動畫(在動畫完成後肯定會銷燬克隆)