Google Sketchup插件的Javascript事件循环/消息泵
我正在开发一个使用Ruby API编写的Google Sketchup插件。在这个API中有一个WebDialog类,可以用来呈现HTML并在WebDialog和插件代码的Ruby端之间移动数据。我正在使用这个类为我的插件构建一个UI。
数据以异步方式从WebDialog发送到Ruby端。由于subpar文档我最初没有意识到这一点,现在我已经进入我的插件,它开始为我创造一些问题。具体来说:当从WebDialog到Ruby端进行多次连续调用时,只执行最后一次调用。因此,我显然需要设计某种“桥梁”,它将阻止从WebDialog到Ruby端的调用丢失 - 我认为,这基本上是一个“事件循环”或“消息泵”系统。
我的问题是我不知道如何做到这一点。我希望有人可以为我提供某种资源,为这样一个系统应该如何工作提供一个框架 - 需要什么样的检查,执行它们的顺序等等。我知道这可能是一个非常复杂的任务,但我只需要一些基本的东西:基本上,当我向Ruby发送请求时,一种让Javascript停止的方法,直到我得到我需要的数据,并处理任何可能的错误突然出现。
任何帮助将非常感谢!
没有找到相关结果
已邀请:
1 个回复
葛瞎说漓
是同步的。 我通过查询向WebDialog发送命令。然后Javascript处理它并将结果放入一个隐藏的INPUT元素,然后我使用'WebDialog.get_element_value`来获取内容。 所有这些我都包装成一个包装器方法,它将处理返回值并将其转换为适当的Ruby对象。 http://www.thomthom.net/software/sketchup/tt_lib2/doc/TT/GUI/Window.html#call_script-instance_method 大纲是: 进行调用(.execute_script)以清除隐藏的INPUT元素 进行JS将处理的实际调用,并将返回值放入隐藏的INPUT中 使用.get_element_value获取隐藏的INPUT值 这一切都是同步的。 Javascript泵 Javascript> SketchUp 如果你真的需要从JS中提取信息,那么我认为你需要做这样的事情: JS:将消息推送到消息队列中 JS:向SU发送有消息的消息 SU:当回调通知新消息时,查询JS以获取下一条消息并继续直到没有更多消息。这应该工作,因为它是如前所述的类似方法。 概念是存储您的消息,然后将控制权交给SketchUp一侧,可以同步泵送它。 (未经考验的理论。)