[前][次][番号順一覧][スレッド一覧]

rails:3922

From: dezawa <dezawa@a...>
Date: Fri, 23 Aug 2013 16:35:06 +0900
Subject: [rails:3922] Re: periodically_call_remote を途中で止める方法はありますか

periodically_call_remoteを止めることできました。

前島さまのpostでなるほど、とjavascriptを久〜〜〜〜しぶりに
書くか、とリハビリのために prototype.js を眺めていて
PeriodicalExecute に stopメソッドが定義されているのに
気がつきました。

で、prototype.rbのperiodically_call_remoteメソッドを
application_helper.rbにコピり
def periodically_call_remote_with_timer_id として少し手を加える
ことでうまく動くように、ではない、うまく止まるようになりました
有難うございました。

#######
  new PeriodicalExecuter(function() {...}
を返すのではなく
 TimerID_#{options[:update]} = new PeriodicalExecuter(function() {...}
を返すようにし

controllerにて
    render :update do |page|
      page.TimerIDHogeFoo.stop if タイマー停止条件
      page.replace_html "tag名",  html_文字列
   end

とすることで成功。

アイデアはすぐ浮かんだのですが、TypeError: element is null
や、識別子の未定義エラー に悩まされてました。

分かったことは、
options[:update] = "hoge_foo" のとき、
 TimerID_#{options[:update]} = new PeriodicalExecuter(function() {...}

としても、作られる javascript では TimerID_hoge_foo = new ...
ではなくString#classifyされ        TimerIDHogeFoo  = new ...
になってました。

  def periodically_call_remote_with_timerID(options = {})
    frequency = options[:frequency] || 10 # every ten seconds by default
   
    # update は controller や *.rjs で行うので、
    # options[:update] は削除しておく
    timerid= "timerID_#{options.delete(:update)}".classify
    code = "#{timerid} = new PeriodicalExecuter(function()
{#{remote_function(options)}}, #{frequency});
"
   javascript_tag(code)
  end


--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      3918 2013-08-15 00:20 [dezawa@a...         ] periodically_call_remote を途中で止める方法はありますか
   @  3919 2013-08-16 16:14 ┗[netwillnet@g...     ]                                       
      3920 2013-08-20 12:01  ┣[dezawa@a...         ]                                     
->    3922 2013-08-23 09:35  ┃┗[dezawa@a...         ]                                   
      3921 2013-08-23 09:03  ┗[dezawa@a...         ]