2013-05-21 33 views
0

代碼示例:我怎樣才能做一個回調從FireBreath爲JavaScript

bool MirrarOrnaments::onMouseDown(FB::MouseDownEvent *evt, FB::PluginWindow *) 
{ 
    if(evt->m_Btn == FB::MouseButtonEvent::MouseButton_Left) 
    { 
    //from here i need to function in my JavaScript with argument of FB::variant_list_of(evt->m_x)(evt->m_y)); 
    } 
} 

這可能嗎?
試圖簡單地返回variant_list在JS使用它,

,但它需要被COS反正bool類型:

BEGIN_PLUGIN_EVENT_MAP() 
EVENTTYPE_CASE(FB::MouseDownEvent, onMouseDown, FB::PluginWindow)  
END_PLUGIN_EVENT_MAP() 

回答

3

有回調到JavaScript首先需要傳遞一個回調作爲輸入你的JSAPI插件。

,你可以做到這一點,如下所示:

在PluginTestAPI.cpp在PluginTestAPI.h

registerMethod("SetCallback", make_method(this, &PluginTestAPI::SetCallback)); 

int PluginTestAPI::SetCallback(const FB::JSObjectPtr& callback) 
{ 
    m_CallBack = callback; 
} 

class PluginTestAPI 
{ 
    FB::JSObjectPtr* m_pCallback; 
    int SetCallback(const FB::JSObjectPtr& callback); 

,然後在JavaScript

通過此功能,當您設置:

function myJSCallback (params) { 
} 

myplugin.SetCallBack(myJSCallback); 

然後你就可以從C調用這個回調++代碼:

bool MirrarOrnaments::onMouseDown(FB::MouseDownEvent *evt, FB::PluginWindow *) 
{ 
    if(evt->m_Btn == FB::MouseButtonEvent::MouseButton_Left) 
    { 
    //from here i need to function in my JavaScript with argument of  
    m_pCallback->Invoke(FB::variant_list_of(evt->m_x)(evt->m_y)); 
    } 
} 
+1

亦如http://www.firebreath.org/display/documentation/Firing+Events+from+JSAPI – taxilian

+1

還要注意描述,你可以觸發事件如果你要通過引用傳遞FB :: JSObjectPtr,它應該是const FB :: JSObjectPtr&(確保它是const)。否則,即使它編譯了,也可能意外引起一些問題。 (我編輯帖子反映) – taxilian

+0

你是正確的出租車,感謝您的編輯,這實際上是它的代碼完成的方式,你也是正確的事件,我只是選擇了一個答案,而不是5;) –