2011-05-23 81 views
0

正在尋找一種方法來實現從jquery中對rails方法的調用,但不需要渲染任何東西,只需在後臺。從jquery調用的rails函數

這個想法是,我有一個選擇標記與多選啓用,我的模型有一個布爾字段稱爲積極,當一個元素被選中,積極將被設置爲true,否則爲false。

在我的application.js

我有這樣的:

$(".multiselect").change(function() { 
    $("option", this).each(function() { 
     if(this.selected) { 
      // do true for checked 
     } else { 
      // do false for unchecked 
     } 
    } 
}); 

此功能工作正常,但我被困在兩個部分,我知道我可以從(本)獲取對象的ID .VAL (),但我應該在哪裏可以找到它並更改活動字段的函數?在控制器或模型中?介意我不需要渲染任何東西,只是在後臺做事。

其次,我如何從我的jquery中調用這個函數?

任何幫助,非常感謝!

回答

0

您可以在每次觸發更改事件時提交表單。這將被映射到控制器中的一個函數,該函數不會呈現任何內容。

你可以做這樣的事情

在你的application.js

$(".multiselect").change(function() { 
    $("option", this).each(function() { 
    if(this.selected) { 
     // do true for checked 
    } else { 
     // do false for unchecked 
    } 
    } 
    //submitting form after doing stuff 
    $.post($(this).parent("form") ....); 
}); 

在你的控制器,你可能會映射它的「更新」方法

def update 
    # logic to update active attribute of model 
    render :nothing => true 
end 
+0

非常感謝。這不在表格內(至少現在不行)。所以如果我有一個更新方法,我應該把這樣的東西:def update @foo = Foo.find(params [:id])@ foo.active = true/false結束?但我怎麼會不使用窗體從js調用這個函數?我可以說$ .post({#update}(this.val())?或類似的東西傳遞ID? – Lievcin 2011-05-23 08:45:35

+0

你可以通過GET請求來做到這一點,但有沒有一個特定的原因,你爲什麼不想要在表單中包裝選擇列表?一個很好的約定是當你改變一個資源的時候總是做一個POST請求 – 2011-05-23 10:11:58

+0

另外,我忘了添加,在沒有提交表單的情況下,你必須做一個jQuery .get() 類似這樣 - $ .get(「/ some_URL」,{foo_active:$(this).val()},null,「script」); – 2011-05-23 10:14:53