1. 首页
  2. SketchUp

SketchUp如何获取html值

从HTML对话框获取值时出现问题。

This is callback function at sketchup.
add_action_callback(\”receiveValue\”) { |not_used, id, val|receive_value(id,val)}def receive_value(id,>
I try to get input value like this, but I can\”t get>
I can\”t get dlgValues, so I checked the size of dlgValues.
The first messagebox receives a size of 0, and the second messagebox receives a size of 2.
I don\”t understand because I didn\”t do anything between the messageboxes. https://ruby.sketchup.com/UI/HtmlDialog.html#execute_script-instance_method:
The #execute_script method is used to execute a JavaScript string on the html dialog asynchronously. https://ruby.sketchup.com/UI/HtmlDialog.html#add_action_callback-instance_method:
The call is asynchronous.
Asynchronous means a statement is executed independently and the main program flow continues without waiting for a return.
Immediately after @dialog.request_element_value(\”elemHeight\”)被触发,>被执行,此时sketchup.receiveValue(id, document.getElementById(id).value);既没有运行,也没有>。您的消息框想要显示的值还不知道。您需要在知道值后打开消息框。
由于消息框被阻塞,第一个消息框花费了足够的时间,因此在您打开第二个消息框(不是解决方案)之前执行了回调。
有不同的解决方法。重要的是要明白问题是关于事件的顺序:messagebox必须在你确定事件receive_value确实发生之后出现,也就是说不是仅仅在像1s这样的任意时间之后。
– 你可以将process_values和UI.messagebox(dlgValues.size)移动到add_action_callback(\”receiveValue\”)的块内。但是,这个回调不再是通用的,它将始终接收值,并且在@dialog.process_values之前必须处理和显示>def request_and_process_element_values(ids)execute_script(\”sendValues([#{ids.map(&:inspect).join(\”, \”)}]);\”)endadd_action_callback(\”receiveValues\”) { |not_used,>Another issue
Another issue is that your code has secret dependencies that are not obvious to a reader, namely that @dialog.request_element_value。读者或开发人员(也许你)可能不知道这一点,或者忘记了这一点,而是以相反的顺序使用这些行,或者只使用这两行中的一行。第一种方法设置@values,第二种方法读取@values,这是完全隐藏的。从代码设计的角度来看,这是错误的来源。您可以通过直接传递这些值来澄清这种依赖关系,您可以使用类似SketchUp Bridge 2这样的库来为您做一些繁琐的工作,并使传递值变得更容易(在下载之前,请查看教程)。您的代码会变成这样:
@dialog.get(\”sendValue\”, \”elemName\”).then{ |value| UI.messagebox(value) }

SketchUp如何获取html值 为WP2原创文章,链接:https://www.wp2.cn/sketchup/sketchup%e5%a6%82%e4%bd%95%e8%8e%b7%e5%8f%96html%e5%80%bc/