2014-07-09 43 views
1

我一直在探討Famo.us的示例和演示,特別是菜單。在例如taasky,音色等例子中,側面菜單由MenuItemViews組成。每個MenuItemView包含一個背景,圖標和標題 - 每一個都是一個表面。Famo.us菜單 - 點擊 - 有沒有其他方法?

爲了使每個菜單項'可點擊',我必須添加一個.click組成MenuItemView併發出一個事件處理程序的3個表面?

或者是否有更簡單的方法讓每個菜單項「可點擊」?

感謝您的幫助提前:)

回答

2

是的,你想要做的是管你的面事件視圖_eventOutput處理程序。這種方式只需要在視圖本身上定義點擊事件。

在這個例子中有兩個表面,每個管道將所有事件都傳遞給_eventOutput視圖。當我們點擊任一表面時,視圖點擊事件被觸發

希望這有助於!

var Engine = require('famous/core/Engine'); 
var Surface = require('famous/core/Surface'); 
var View = require('famous/core/View'); 

var context = Engine.createContext(); 

var view = new View(); 

var surface1 = new Surface({ 
    size:[400,400], 
    properties:{ 
     backgroundColor:'green' 
    } 
}); 

surface1.pipe(view._eventOutput); 

view.add(surface1); 

var surface2 = new Surface({ 
    size:[200,200], 
    properties:{ 
     backgroundColor:'red' 
    } 
}); 

surface2.pipe(view._eventOutput); 

view.add(surface2); 

view.on('click',function(evt){ 
    console.log("View Clicked!"); 
}) 

context.add(view); 
+0

對不起,延遲迴復。我嘗試了你的建議 - 儘管它在某種程度上有效,但如果我將它用於「MenuItemView」示例,那麼當我點擊菜單項時,我會得到相同的onClick返回 - 這是最後一個值菜單中的菜單項 - 所以雖然它的工作,我不認爲它區分哪些被點擊。 – Pandafinity

+0

你所描述的是一個JavaScript實現問題,可以使用函數綁定來解決。所以你的點擊處理器看起來更像這樣.. view.on('click',function(evt){console.log(this)} .bind(view))..在這個函數中的'this'將被點擊的視圖.. – johntraver

+0

我很抱歉,但我不認爲它的作品 – Pandafinity

相關問題