1. 首页
  2. SketchUp

使用sketchup桥的WebDialog/HtmlDialog教程

WebDialog/HtmlDialog Tutorial using sketchup bridge有两个用于创建UI对话框的类:
– 不推荐的UI::WebDialog使用操作系统的浏览器引擎。JavaScript函数可以用dialog.execute_script(string)5调用,而Ruby回调则用>5触发,后者具有最大URL长度的限制,Unicode编码/字符丢失,需要开发人员手动执行(反)序列化和参数拆分。
– 新的UI::HtmlDialog使用带有现代JavaScript的嵌入式Chromium浏览器。可以用dialog.execute_script(string)6调用JavaScript函数,用sketchup.callbackname(…parameters)3触发Ruby回调,它现在允许任何数量的JSON兼容参数。
WebDialogs有几个问题,这些问题在丢失的手册12中有详细介绍。使用HtmlDialog,开发人员仍然面临两大困难,这导致人们一次又一次地花费开发时间来构建自己的解决方案,而不仅仅是构建扩展:
– 从Ruby到JavaScript(从JavaScript到Ruby:**5***)还没有直接的外部函数调用。虽然开发人员可以使用execute_script,但他们每次都必须注意将参数正确地编码到有效的JavaScript字符串中。
我想提出一个我已经使用了几年的库,我认为它对我来说已经足够好了,可以为其他人服务。您不必使用它,但是如果您在直接使用HtmlDialog时遇到了障碍,请考虑一下。想法
我的想法是使用承诺11。Promises帮助我们处理异步编程。
– 与回调函数模式(回调在参数列表的末尾,如onCompleted)相比,回调附加到返回的promise对象上,避免了参数列表中的冲突。
– Promises为成功和失败提供了两个反馈通道。因此,开发人员可以决定是在Ruby端还是JavaScript端处理错误(或某些错误)。
– 承诺可以使用现代JavaScriptasync和await3。使用WebDialogs/HtmlDialogs
如果您想实现JavaScript→Ruby→JavaScript,您可能会做类似的事情这是:WebDialog
function myFunction1 () {//>
dialog.add_action_callback(\”compute_area\”) { |dlg,>
function myFunction2 (result) {// How to identify to which HTML element this result belongs to?// This is out of the context of myFunction1, // we cannot access variables to>
HtmlDialog
function myFunction1 () {// …sketchup.compute_area(width, length);// You cannot get the computation result here and continue // (like displaying it in the UI).}
dialog.add_action_callback(\”compute_area\”) { |dlg, width,>
function myFunction2 (result) {// How to identify to which HTML element this result belongs to?// This is out of the context of myFunction1, // we cannot access variables to>Using the sketchup-bridge library
Instead of making your Ruby code push data to the dialog, you make the dialog fetch data from Ruby whenever it needs. That means the Ruby part acts like a server, and the dialog is the client.
function myFunction1 () {// …Bridge.get(\”compute_area\”, width, length).then(function (result) {// The callbacks have access to all variables in the scope of myFunction1.// This makes it practical for object-oriented programming, e.g. if you have// a whole table of elements to>
dialog.on(\”compute_area\”) { |deferred, width,>
Using modern JavaScript (HtmlDialog with Chromium 55+ / ECMAScript 2017) it gets simplified to:
function myFunction1 () {//>
which gets rid of all the boilerplate and looks and reads like synchronous code.References
– Github project 55
– Tutorial installable as SketchUp extension 18
– Minimal sample extension template 34
I am trying to test this extension on SU 2015 on macos, but I keep receiving the error
NameError: undefined local variable or method dialog\” for #Error: #/Users/ruggiero/Library/Application Support/SketchUp 2015/SketchUp/Plugins/sample_extension/bridge.rb:539:in dlg_html.exe脚本(jsèu命令)
\”
du cotéjava
\”\”function send(arr)
{
alert(arr)
}\”
j\”ai testécette exampleça marche en parti du cotéjava la fonction m\”affiche seulement le premier paramètre du tableau
,我是大苏西,请您给我讲讲这张桌子上的食物和食物。
谢谢
merci john
请您给我讲讲最近的食物和食物的食物和食物。
谢谢
请您举一个例子,好吗?***26***请给我写信***27***.卢萨:
爪哇岛上的一家餐馆。这是我们选择的最佳选择。
你好。
我喜欢你的标准,我喜欢你的作品,我喜欢你的作品,我喜欢你的作品,我们需要一个函数send(){alert(arr)}mais malheurement y a toujours un seulement,我们选择了一个公平的标准,一个可以改变一切的标准。这是我的密码。可能的话,请评论一下电视上的情况,最典型的例子是,有人在舞台上表演,有人在舞台上表演,有人在舞台上表演,有人在舞台上表演(有人在舞台上表演,
***28***pre>
Et encore Une fois,si tu n\”uses pas SketchUp Bridge c\”est un sujet qui lui est propre.)。我是一位女乘务员,她是一位女乘务员。这是一个新的话题,谢谢你的支持再见蒙索奇,谢谢,干得好。我觉得我应该给你点荣誉,因为你的桥图书馆帮我省了很多工作。我还广泛使用Ruby控制台+,和属性检查器。感谢您对社区的贡献。+1000!
Aerilius:
使用JSON模块将更容易>
其中很大一部分是在javascript端,参数作为一个对象或数组出现在本例中。
另外,关于从ruby调用javascript函数,把它放到窗口中,我想这就解决了:Aerilius:
还没有直接的外部函数调用从Ruby到JavaScript(类似于JavaScript到Ruby:**29***)。虽然开发人员可以使用***30***,但他们每次都必须注意将参数正确地编码到有效的JavaScript字符串中。
好提示!
这基本上就是库为Ruby→JS所做的(除了promises)。它源于***31***和HtmlDialog都不可用的时候,JS→Ruby丢失了字符或完整的消息)。
正如你从两者之间的WebDialog问题中看到的,只要SketchUp不让***32***和***33***成为单一的API方法,总会有开发人员构建他们的字符串并进行斗争。
p>对于许多Ruby核心类,我们也可以这样做…
***34***kengey:
这其中很大一部分是在javascript端,参数作为一个对象或数组出现在这里。
这也意味着,由于JSON是JS对象的定义,因此可以使用它在JS端使用标识符定义数组…
dialog.executeu脚本(\”var>

使用sketchup桥的WebDialog/HtmlDialog教程 为WP2原创文章,链接:https://www.wp2.cn/sketchup/%e4%bd%bf%e7%94%a8sketchup%e6%a1%a5%e7%9a%84webdialog-htmldialog%e6%95%99%e7%a8%8b/