0
我使用的是Unobtrusive JavaScript solution for polling in a Rails application,這似乎是一個很好的解決方案,但我無法從.js.erb
視圖調用.stop()
方法。我希望能夠在通過輪詢刷新其中一個項目時打開內聯編輯表單時停止輪詢。我打電話從edit.js.erb視圖.stop()
呈現,但它一直輪詢...從不同的文件調用JavaScript構造方法 - Rails
unobtrusive_poller.coffee:
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();
// });
...
由於我明白了,問題是@intervalId
是未定義的。
這是正確的軌道嗎?
任何有關如何使這項工作的建議將不勝感激。
謝謝!
感謝您的建議!這是一個很好的建議,但我不想遍歷所有已啓動的'Poller'對象並停止它們。我只是想停止一個特定的「輪詢」。你有什麼建議如何針對數組中的特定「輪詢」?再次感謝! – slehmann36
如果你可以添加一個特定的ID給每個div。這將是可能的。直到那時很難停止目標股利。即使你可以附加一個虛擬的獨特類,它也可以工作。讓我知道如果這是可能的,我會更新我的答案。 –
是的,我可以添加一個ID .. – slehmann36