在点击一个插槽时,我更改了插槽的内容以提供用户反馈,然后调用一些需要几秒钟才能运行的代码。但是,在“慢”过程完成之后,才会对插槽的更改进行渲染。有没有办法可以在'慢'代码运行之前强制渲染。
在以下示例中,用户永远不会看到“正在处理,请稍候......”
class MyTest < Shoes
url '/', :index
url '/result', :result
def index
stack do
my_button=flow do
image './assets/trees.jpg'
para 'Process Image'
end
my_button.click do
my_button.contents[0].hide
my_button.contents[1].text="Processing, please wait ..."
sleep(4) # Simulate slow process
visit '/result'
end
end
end
def result
stack do
para "Finished processing"
end
end
end
Shoes.app
在ruby.c或canvas.c中查看Shoes源代码,可以看到重绘或绘制画布。他们可以从鞋内驯服吗?
提前致谢
答案 0 :(得分:2)
这有点像hackish,但你可以把实际的逻辑转移到这样一个单独的函数中:
def doStuff()
sleep(4) # Simulate slow process
visit '/result'
end
并使用timer
在单独的线程中运行它:
my_button.click do
my_button.contents[0].hide
my_button.contents[1].text="Processing, please wait ..."
timer(0) { doStuff() }
end
答案 1 :(得分:2)
谢谢。这是一种享受。我还使用Threads制定了一个解决方案:
def doStuff
sleep(4) # Simulate slow process
visit '/result'
end
.
.
.
my_button=stack do
image "button_image.jpg"
para "Press me"
end
my_button.click do
Thread.new do
doStuff
end
my_button.contents[0].hide
my_button.contents[1].text = "Processing, please wait ..."
end
这两种解决方案似乎都按预期工作。