停止observe_field观察

时间:2010-03-14 23:07:04

标签: javascript ruby-on-rails prototypejs

我正在使用rails helper observe_field来观察文本字段的输入:

<%= observe_field :word_word, :frequency  => 0.25, :function => "wordObserve('#{@word_str}')" %>

当文本字段输入变为某个值时,我想停止观察。我已经尝试了Event.stop()和Event.stopObserving(element,eventName,handler)但似乎都没有工作。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

要停止观察者,您必须在观察者上调用stop方法。默认情况下,observe_field帮助程序会创建一个未命名的观察者。您必须修补帮助程序以创建命名观察者。

将此修补程序添加到app/helpers/application_helper.rb

module ActionView::Helpers::PrototypeHelper

  def observe_field(field_id, options = {})
    poller_name, key = options.delete(:poller_name), "new Form.Element.Observer"

    poller_name ? super : 
        super(field_id, options).gsub(Regexp.new(Regexp.escape(key)), 
           "var #{poller_name} = #{key}") 
  end
end

在视图中创建一个名为field observer的内容:

<%= observe_field :word_word, :frequency  => 0.25, 
                  :poller_name => :word_word_poller
                  :function => "wordObserve('#{@word_str}')" %>

在java-script回调函数中,调用word_word_poller.stop以停止观察该字段。

<强>参考

1)How to remove a Form.Element.Observer