2014-02-07 28 views
0

任何人都可以啓發我如何在Ember.View中使用becameVisible鉤子嗎?如果我以與didInsertElement掛鉤相同的方式使用它,則在我預期它不會觸發時。成爲EmberJS視圖中的可視鉤子

案件是,我有多個選項卡,其中一個包含谷歌地圖。只要選中該選項卡,我需要在地圖上觸發刷新。

關於掛鉤的文檔可以發現here,圍繞中途的頁面,在生命週期掛鉤

我在灰燼1.3.2

+0

我無法找到任何文件的一個becomeVisible掛鉤,http://emberjs.com/api/classes/Ember.View.html你可以提供一個鏈接等 – MartinElvar

+0

@MartinElvar我添加了一個參考。它可以在Lifecycle Hooks的[view層的解釋](http://emberjs.com/guides/understanding-ember/the-view-layer/)中找到 – Rudi

回答

0

那麼在關於標題回答到becameVisible鉤上風景。該視圖僅在視圖的isVisible屬性更改時觸發。默認情況下,isVisible屬性在視圖上設置爲true。因此,如果您在視圖上切換該屬性,或將其設置爲false,則該視圖將被隱藏,並且當becameHidden掛鉤被設置爲true時會觸發becameVisible掛鉤。

因此,可以說對我們有針對性的視圖的動作和視圖名稱App.MyDiv,我們將用它來說明鉤becameVisible/becameHidden該視圖上發射的鏈接索引模板:

<script type="text/x-handlebars" data-template-name="index"> 

    <a href="#" {{action 'hide' target="view"}}>Hide that Div</a> 

    {{view App.MyDiv}} 

    </script> 

我們需要處理隱藏動作,並且由於它的目標視圖我們將把它放在那裏,然後使用viewName屬性設置爲「隱藏mydiv」的視圖App.MyDiv,以便我可以通過名稱獲取它,然後設置isVisible屬性:

App.IndexView = Ember.View.extend({ 
    actions: { 
    hide: function() { 
     console.log(this.get('hidemydiv').toggleProperty('isVisible')); 
    } 
    } 
}); 

現在我們App.MyDiv視圖定義:我們可以有這樣的事情:

App.MyDiv = Ember.View.extend({ 
    viewName: 'hidemydiv', 
    templateName: 'myDiv', 

    didInsertElement: function() { 
    console.log('My Div: didInsertElement'); 
    }, 

    becameVisible: function() { 
    console.log('My Div: Became Visible'); 
    }, 

    becameHidden: function() { 
    console.log('My Div: Became Hidden'); 
    } 
}); 

這裏是一個JSBin顯示當isVisible財產是在視圖切換會發生什麼。

http://emberjs.jsbin.com/nuniqawi/1/edit

關於你的問題,你可以有標籤上的行動,按下時,它調用某種在地圖上重新呈現的動作。