Ho un'idea e un problema a cui non riesco a trovare risposta o soluzione. Alcune informazioni se necessario tardive e utile:best_in_place - usa il valore aggiornato in vista
- Rails versione 3.2.9
- best_in_place (git: //github.com/straydogstudio/best_in_place.git)
- Rubino 1.9.3p327
Ok, quindi ho la pagina delle impostazioni in cui posso aggiornare le singole impostazioni modificandole con l'uso di best_in_place gem. Funziona bene. Felice con quello.
Alcune delle impostazioni sono interconnesse, ovvero, devo sommarle o sottrarle. Come suggerimento utile per l'utente, a mio avviso, proprio accanto al modulo sul posto per quelle impostazioni c'è anche un valore calcolato.
Ora, ovviamente, mi piacerebbe vedere questo valore essere aggiornato insieme all'attributo stesso. Non riesco a trovare un modo per farlo.
Se lo faccio con: data => funziona, ma ottengo il vecchio e non il nuovo valore, quindi la mia vista è sempre "1 passo indietro".
ho anche provato con update.js.erb e _test.html.erb parziale, ma il file javascript non funziona. È come se non esistesse. Ho doppio, triplo controllato dove metterlo ed è OK (app/views/controller/_partial.html.erb)
così. Una domanda piuttosto semplice sarebbe; come posso accedere a un valore aggiornato e utilizzarlo nuovamente per aggiornare i calcoli. Personalmente penso che dovrei andare con il file partial e js - ma non ho idea del motivo per cui il file JS non viene prelevato. Qualche idea su questo?
Se ci sono altre opzioni, vorrei più che apprezzare il suggerimento.
Grazie!
--edit (codice aggiunto)
vista:
<td>
<%= best_in_place @s,:pay_after_bonus, :display_with => :number_to_percentage, :type => :input, :nil => "Klikni tu za spremembo!", :cancel_button=> "Prekliči" %>
Cena: <span id="test"><%= number_to_currency(@s.family_member_price - ((@s.pay_after_bonus * @s.family_member_price)/100)) %></span>
</td>
settings_controller.rb:
def update
@s = Setting.find(params[:id])
respond_to do |format|
@s.update_attributes params[:setting]
@s.create_activity :update, :params => { :setting => params[:setting].keys.first }, owner: current_user
format.json { respond_with_bip(@s) }
format.js
end
end
update.js.erb:
$("#test").html("<%= escape_javascript(render(:partial => "update")) %>");
_update. html.Erb:
<strong>Test</strong>
- EDIT 2:
OK, a quanto pare è possibile fare qualcosa di simile che voglio in questo modo:
$('.best_in_place[data-attribute="model_attribute"]').bind(
"ajax:success", function(event, data) {
// function that will update whatever
});
in combinazione con
// respond to json request with
render :json => {"model" => @model}
&
"ajax:success", function(event, data) {
var result = $.parseJSON(data);
// from here the result var will be accessible with all the data returned by the controller.
// result.model is your object - use result.model.attribute to get specific values...
}
Ma qui finisce per me. Non so come usare render: json => {"model" => @model} nel mio caso, poiché deve essere fatto in combinazione con format.json {respond_with_bip (@s)}.
Dove inserisco il rendering nel controller? Attualmente ricevo 500 errori interni del server cercando di farlo come risposta.
Ho trovato questa soluzione here.
Grazie !!
È necessario mostrare il codice (html/js e controller). Senza di esso, possiamo solo fare supposizioni. Forse c'è un errore nel tuo codice JS che ti fa pensare che il tuo file non venga prelevato. –
OK, ho aggiunto il codice pertinente.Thx –