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... ]