Ruby 点击鞋子中的事件

Ruby 点击鞋子中的事件,ruby,events,shoes,Ruby,Events,Shoes,单击一个插槽后,我更改插槽的内容以提供用户反馈,然后调用一些需要几秒钟才能运行的代码。但是,只有在“慢速”过程完成后,才会渲染对插槽的更改。是否有任何方法可以在“慢速”代码运行之前强制进行渲染 在下面的示例中,用户从未看到“正在处理,请稍候…” class MyTest < Shoes url '/', :index url '/result', :result def index stack do my_button=flow do i

单击一个插槽后,我更改插槽的内容以提供用户反馈,然后调用一些需要几秒钟才能运行的代码。但是,只有在“慢速”过程完成后,才会渲染对插槽的更改。是否有任何方法可以在“慢速”代码运行之前强制进行渲染

在下面的示例中,用户从未看到“正在处理,请稍候…”

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
class MyTest
浏览ruby.c或canvas.c中的源代码,可以看到对重新绘制或绘制画布的引用。他们可以从鞋内打电话吗


提前感谢

这有点粗糙,但您可以将实际逻辑移动到单独的函数中,如下所示:

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

多谢各位。那是一种享受。我还使用线程制定了一个解决方案:

      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
这两种解决方案似乎都如预期的那样有效