2012-10-30 93 views
1

是否有可能在同一個Spine.js中有兩個控制器:公寓和地圖。有沒有辦法打電話讓公寓被選中時,地圖會做些什麼?Spine.js中的控制器間通信

# Apartments 
class Show extends Spine.Controller 
    events: 
    'click [data-type=edit]': 'edit' 
    'click [data-type=back]': 'back' 

    constructor: -> 
    super 
    @active (params) -> 
     @change(params.id) 

    change: (id) -> 
    @item = Apartment.find(id) 
    @render() 

    render: -> 
    @html @view('apartments/show')(@item) 
    # also update the map here. 

回答

2

我猜你有幾種選擇

使用路由

使用Spine的路由導航到該公寓的URL和更新地圖。你可以在Spine的Contacts example上看到一個例子。

在您index.coffee定義/公寓路線:

 
@routes 
     '/apartment/:id': (params) -> 
     @apartmentList.active(params) 
     @map.show.active(params) 

在側邊欄/公寓名單控制器使用@navigate改變狀態

 
    change: (item) => 
    @navigate '/apartment', apartment.id 

最後趕上活動的事件對你地圖控制器(like here)並更新地圖

使用事件

當選擇公寓火災事件

Spine.trigger 'selectApartment', item.id
,然後在地圖控制器上捕獲此事件:
Spine.bind 'selectApartment', onSelectAparmtnet

+0

好的解決方案,它的工作原理! – Avishai