.js.erb
ビューから.stop()
メソッドを呼び出す際に問題がありますが、私はUnobtrusive JavaScript solution for polling in a Rails applicationを使用していますが、これは素晴らしい解決策と思われます。私はポーリングで更新されている項目の1つに対してインライン編集フォームが開いているときにポーリングを停止できるようにしたい。異なるファイルからJavaScriptコンストラクタメソッドを呼び出す -
class Poller
constructor: (@div) ->
interval: ->
$(@div).data("interval") ? 3000
url: ->
$(@div).data("url")
start: ->
console.log "Starting polling"
@intervalId = setInterval(@request, @interval())
request: =>
# console.log "Interval: #{@interval()}"
# console.log "URL: #{@url()}"
console.log "Polling"
$.ajax(
url: @url(),
dataType: "script").fail (data) =>
console.log "Poll failed!" # + JSON.stringify(data)
return
stop: ->
console.log "Stopping polling"
clearInterval(@intervalId)
$(document).on 'turbolinks:load', ->
$("div[data-poll='true']").each (i, div) ->
console.log "DIV: " + div
new Poller(div).start()
edit.js.erb:
// Pause polling while edit form is open
console.log($('div#messages[data-poll='true']'));
new Poller($('div#messages[data-poll='true']')).stop();
// $("div[data-poll='true']").each(function(i, div) {
// console.log("DIV: " + div);
// return new Poller(div).stop();
// });
...
として
unobtrusive_poller.coffee ...私がレンダリングされるedit.js.erbビューから.stop()
呼び出し、それがポーリングを続けます私はそれを理解して、問題は@intervalId
は未定義です。
これは正しい経路ですか?
この作業をどのように行うかについてのご意見は、大変ありがたく思います。
ありがとうございます!
お寄せいただきありがとうございます!それは良い提案ですが、私は開始されたすべてのPollerオブジェクトを繰り返し処理して停止させたくありませんでした。私はちょうど1つの特定の 'ポーラー'を止めることができるようにしたい。配列内の特定の 'Poller'をどのようにターゲットにするかについて提案がありますか?再度、感謝します! – slehmann36
各部門に特定のIDを追加できる場合は、それは可能です。それまでターゲットdivを停止するのは難しいです。たとえダミーのユニークなクラスを追加できたとしても、それはうまくいくでしょう。可能であれば教えてください。私は自分の答えを更新します。 –
ええ、私はIDを追加することができます.. – slehmann36