2014-01-14 48 views
1

在Rails 4中我有一個類(區域)的索引和顯示視圖,它們有相當複雜的javascript來更新值。對於DRYness,HTML只是創建一個無數據佈局,而js文件插入數據,修改樣式等等。這些數據需要每15秒左右更新一次。 A common.js.coffee文件包含如何在Rails中立即執行和定期執行ajax查詢

root = exports ? this 
root.executeQuery = (isAsync = true) -> 
    if $('#ajaxParams')? and $('#ajaxParams').data('model')? 
    # Use dynamic updates 
    update_url = '/' + $('#ajaxParams').data('model') 
    if $('#ajaxParams').data('id')? 
    update_url += '/' + $('#ajaxParams').data('id') 
    update_url += '.js' 
    $.ajax({url: update_url, async: isAsync, dataType: "script"}).done (content) -> 
    setTimeout (-> 
     executeQuery() 
    ), 15000 
else 
    setTimeout (-> 
    executeQuery() 
), 15000 

它處理定期更新。然後zones.js.coffee包含

$(document).ready -> 
    executeQuery(false) 

所以頁面上準備好了,運行查詢,動態內容插入,計時器定,然後定期更新。到目前爲止,這麼好,但是當我點擊一個帶我到區域顯示方法的鏈接時,該頁面無需數據,直到定時器啓動ajax請求。沒有頁面準備好的事件。當我點擊一個顯示鏈接返回到索引時,會發生同樣的事情。

如何讓這些視圖始終立即更新,或者至少緩存以前的數據,然後進行定期更新?

+1

難道你不能在一個onclick事件嗎? 'object.onclick = function(){Ajax request};' – ChrisBarthol

回答

0
There is no page ready event. The same thing happens when I click on a show link to go back to the index 

這個問題將通過Turbolinks

Turbolinks引起基本保持自己的網頁上<head>標籤,並通過AJAX加載<body>。雖然它提供了一些性能優勢,但它會導致嘗試動態加載JS的各種問題。爲了解決這個問題,你需要:Rails 4: how to use $(document).ready() with turbo-links

$(document).ready -> 
    executeQuery(false) 

應該是:

$(document).ready(executeQuery) 
$(document).on('page:load', executeQuery) 

你需要封裝的功能變量,像這樣:

executeQuery = -> 

    (isAsync = true) -> 
     if $('#ajaxParams')? and $('#ajaxParams').data('model')? 
      # Use dynamic updates 
      update_url = '/' + $('#ajaxParams').data('model') 
     if $('#ajaxParams').data('id')? 
      update_url += '/' + $('#ajaxParams').data('id') 
      update_url += '.js' 
      $.ajax({url: update_url, async: isAsync, dataType: "script"}).done (content) -> 
      setTimeout (-> 
       executeQuery() 
      ), 15000 
     else 
      setTimeout (-> 
       executeQuery() 
      ), 15000 

我認爲你將不得不重新命名你的函數名稱(我不能從你的問題收集確切的上下文),因爲你似乎是self-referencing

+0

這完全解決了我的問題。謝謝!我擺脫了參數和其他條款,因爲這只是我的破解試圖解決問題。我不太確定你對自我參考的關注。這只是重新調度自己的功能。 – RussK