2012-11-13 1 views
5

Ho bisogno di personalizzare le caselle di conferma nella mia applicazione rotaie. Ho trovato this, aggiunto il codice js nel mio application.js ma sembra che $ .rails non sia definito.

Ecco il codice ho aggiunto a application.js di file:

$.rails.allowAction = function(link) { 
    if (!link.attr('data-confirm')) { 
    return true; 
    } 
    $.rails.showConfirmDialog(link); 
    return false; 
}; 

$.rails.confirmed = function(link) { 
    link.removeAttr('data-confirm'); 
    return link.trigger('click.rails'); 
}; 

$.rails.showConfirmDialog = function(link) { 
    var html, message; 
    message = link.attr('data-confirm'); 
    html = "<div class=\"modal\" id=\"confirmationDialog\">\n <div class=\"modal-header\">\n <a class=\"close\" data-dismiss=\"modal\">Ã</a>\n <h3>Are you sure Mr. President?</h3>\n </div>\n <div class=\"modal-body\">\n <p>" + message + "</p>\n </div>\n <div class=\"modal-footer\">\n <a data-dismiss=\"modal\" class=\"btn\">Cancel</a>\n <a data-dismiss=\"modal\" class=\"btn btn-primary confirm\">OK</a>\n </div>\n</div>"; 
    $(html).modal(); 
    return $('#confirmationDialog .confirm').on('click', function() { 
    return $.rails.confirmed(link); 
    }); 
}; 

ho ottenuto un errore "TypeError Uncaught: Impossibile impostare la proprietà 'allowAction' di non definito".

Sai cosa c'è che non va? (Jquery_ujs gemma è installato e caricato con successo)

Grazie in anticipo,

Jercoh

risposta

3

È necessario:

gem 'jquery-rails' 
non

i jquery_ujs.

+0

jquery-rails è già installato. – Jercoh

+1

Dato che hai detto di metterlo in application.js probabilmente non stai usando la pipeline degli asset, quindi controllerei l'ordine di caricamento degli script. Questa roba dovrebbe essere in fondo. –

2

ho messo questo codice in un file chiamato custom.confirm.js e poi mettere quelle due righe

//= require jquery_ujs 
//= require custom.confirm.js 

in fondo application.js, e ha funzionato, grazie!

0

Ho appena avuto lo stesso problema, ha funzionato bene su Firefox ma non su Chrome. Immagino che fosse dovuto alla cache di Chrome e l'ho risolto pulendo tutta la cache del browser relativa al mio server di sviluppo,