ruby 鞋子中的点击事件

yc0p9oo0  于 2023-06-22  发布在  Ruby
关注(0)|答案(2)|浏览(129)

在单击一个插槽时,我更改插槽的内容以提供用户反馈,然后调用一些代码,运行几秒钟。然而,对插槽的更改直到“慢”过程完成之后才呈现。有没有什么方法可以强制渲染发生在'慢'代码运行之前。
在下面的示例中,用户永远不会看到“正在处理,请等待...”

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源代码,可以找到对repaint或paint canvas的引用。它们能从鞋子里叫出来吗?
先谢谢你了

li9yvcax

li9yvcax1#

这有点像黑客,但你可以把实际的逻辑移动到一个单独的函数中,像这样:

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
kupeojn6

kupeojn62#

谢谢,这是一种享受.我还使用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

这两种解决方案似乎都能按预期工作。

相关问题