2012-03-14 21 views
1

我有一個新的高度棘手的問題,從3天開始就讓我瘋狂......也許有人可以幫助我。Rails 3:棘手的一個...刷新模式後的選擇框,無需重新加載整個頁面

我有一個選擇框的圖(以供用戶選擇一個帳戶): 這裏是圖的一部分:

div id="boxplot"> 
<div id="box1"> 
Sur quel compte?<br /> 
<div id="banque"><%= render 'banque', :f => f %></div><br /><br /> 
Combien?<br /> 
<%= f.text_field :montant %> 
</div> 

然後這裏是部分:

<%= f.select(:debit, @in.collect {|p| [p.nom, p.numero]} + ['Ajouter...'], {:include_blank => 'Sur quel compte?'})%> 

正如你可以看到我有一個變量在控制器新的行動是:

def new 
@journal = Journal.new 
@in = Compte.where(:categorie => "Actif") 

是否已經實現了一個模式框,讓用戶可以「添加一個新帳戶」(compte當然是另一種模式)。這是Javascript。這很簡單,只是檢查,如果用戶選擇「Ajouter ......」如果是打開一個iframe來創建的孔特模型的新紀錄:

$(function() { 
$('#banque').change(function() 
{ 
$a = $('#journal_debit').val(); 
if ($a == "Ajouter...") { 
$.fancybox({ 
     'width': '70%', 
     'height': '70%', 
     'autoScale': false, 
     'transitionIn': 'fade', 
     'transitionOut': 'fade', 
     'type': 'iframe', 
     'scrolling': 'no', 
     'padding': 45, 
     'showCloseButton': true, 
     'title': "Ajouter un nouveau compte" , 
     'titleShow': true, 
     'titlePosition': 'over' , 
     'onComplete': function() { 
     $("#fancybox-title").css({'top':'0px', 'bottom':'auto'}); 
     }, 
     'href': '/comptes/modal/' 
    }); 
} 
else 
{ 
} 

}); 
}) 

我提出這個要求與create.js.erb JS :

$(function() { 
parent.$.fancybox.close(); 
}) 

一切正常,這一點,但回來的父窗體,不更新我的選擇框(我指的是新創建的帳戶未在選擇框中顯示...)。

只拿到方式,它是添加這一個create.js.erb:

parent.location.reload(true); 

但問題是,重新加載整個頁面會觸發模式之前鬆散的用戶會inputed數據盒子...

我找不到辦法做這個棘手的問題。是否有可能僅重新加載頁面的一部分(例如包含選擇框的部分),但是如果是,如何刷新@variable?

或者還有另一種很酷的方式來實現我所追求的?

非常感謝您的幫助。

回答

1

這是對你的HTML的一個非常簡單的改變,所以你不妨使用JS來做到這一點 - 尤其是因爲你已經使用了JS回調。添加類似

$('#select-box-id').append(
    '<option value="<%= @company.id %>"><%= @company.name %></option>' 
); 

到你的回調函數應該爲你做所有的基礎知識。查看jQuery Docs瞭解更多詳情 - 它們也是一個很好的通用參考。

乾杯!

+0

聽起來像一個很酷的想法,但是當我實施它時@company不包括從模式創建的新公司... – Dannoel 2012-03-15 06:46:58

+0

我怎樣才能處理通過模式創建新記錄後「重新加載」@variable? – Dannoel 2012-03-15 06:49:40

1

大家好,感謝您的投入,它幫助我找到了解決方案。

我已經解決了這個人在的fancybox的onClosed觸發添加此Ajax調用:

'onClosed': function() {$.getScript("/entrees/new.js"); }, 

所以當模態對話框關閉這個人是調用new.js.erb文件。在這個文件中,我設法將新的compte條目插入到選擇框中。這是/new.js.erb

$('#journal_debit > option:last-child').before(
'<option value="<%= @in.last.numero %>"><%= @in.last.nom %></option>' 
); 

任務完成!

相關問題