我如何做一个回调从FireBreath到JavaScript

How can I do a callback from FireBreath to JavaScript

本文关键字:FireBreath JavaScript 回调 何做一      更新时间:2023-10-16

代码示例:

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中使用它,

但是它必须是bool值因为:

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

要在JavaScript中有一个回调,您首先需要将回调作为输入传递给JSAPI插件。

你可以这样做:

在PluginTestAPI.cpp

registerMethod("SetCallback", make_method(this, &PluginTestAPI::SetCallback));
int PluginTestAPI::SetCallback(const FB::JSObjectPtr& callback)
{
  m_CallBack = callback;
}
在PluginTestAPI.h

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)); 
  }
}