2011-10-20 52 views
4

我是新來的JavaScript和啓動混合的JavaScript +的jQuery + CoffeeScript的一起是不容易的,像我這樣的新手...每個循環中的CoffeeScript,jQuery的

我創建了一個非常簡單的排序列表我想在飛行中將我的列表重新編號(服務器端代碼是確定的)。

的CoffeeScript的代碼,我寫的是:

jQuery -> 
    $('.simple_grid tbody').sortable 
    axis: 'y' 
    containment: 'parent' 
    cursor: 'move' 
    tolerance: 'pointer' 
    update: (event,ui)-> 
     $.post($(this).attr('dataupdateurl') + '/' + ui.item.attr('id') + '/reorder/' + ui.item.index()) 
     $('tr > td > a > span.number').each (i, element) => 
     $(element).html i 

這會產生這種

<table class= "simple-grid"> 
    <tbody dataupdateurl = "xxx"> 
     <tr> 
     <td> 
      <a href="some_link"><span class="number">1</span>text 1</a> 
     </td> 
      <td> 
      <a href="some_link"><span class="number">2</span>text 2</a> 
     </td> 
     <td> 
      <a href="some_link"><span class="number">3</span>text 3</a> 
     </td> 
     </tr> 
    </tbody> 
</table> 

我試圖重新編號有什麼span.number元素中的更新回調觸發時的表但我得到以下錯誤信息:

元素未定義

任何幫助將非常歡迎!謝謝!

更新:這個問題是由於這樣的事實,我錯過了最後一個函數的縮進:

$('span.number').each (i, element) => 
     $(element).html i 

回答

4

我不知道咖啡劇本,但通常使用jQuery選擇不需要完整路徑。 例如$('tr > td > a > span.number')可以改寫爲$('.number'),而且.each()通常用作.each(function(index, element) { YOUR CODE });。最後一件看起來不合適的事情是設置html,這通常是.html('value')。所以在你的情況下$(element).html(i);。希望這可以幫助?

+0

你好,你對選擇器完整路徑是正確的。我改變了它。謝謝。關於剩餘的,我認爲這是咖啡的語法等同於你在javascript中說的。但肯定有什麼地方出錯...... – ndemoreau

+1

如果你閱讀了代碼,在邏輯上會發生一篇文章,然後直接發佈一篇文章。有可能是由於事件的順序,帖子完成了,並且dom沒有完全創建。嘗試將.each函數移動到$(document).ready(function(){});或咖啡劇本相當。因此,您知道腳本將始終在帖子完成並且dom創建後執行。它仍然發生在渲染之前? – Kosmosniks

+0

猜猜什麼?代碼是好的。這只是縮進問題......當我根據您的建議移動代碼時,我發現了這一點。非常感謝! – ndemoreau