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