2012-11-22 4 views
0

nécessitent ici est mobile.jsRails forte pour des actifs

//= require jquery 
//= require iui 
//= require faye-updater 
//= require anonymous-chat 
//= require anonymous-vote 
//= require_self 

Voici comment j'inclure des scripts

<%= content_for :head do %> 
<%= javascript_include_tag "#{Settings.faye.address}/client.js" %> 
<%= javascript_include_tag "mobile" %> 
<% end %> 

et ce que je reçois après les actifs recompiler: mobile .... js commence à partir de

function launch_faye_updater.... 

cette fonction est des faye-updater.js et il doit être inclus après jquery et IIU. Et cela ne fonctionne pas à cause d'un mauvais ordre d'inclusion. Comment faire Rails inclure les actifs dans le bon ordre?

UPD: Ceci est en mode de production Rails 3.2.8

+0

Quelle version de Rails utilisez-vous? Il semble que vous faites la bonne chose pour compiler les actifs dans le bon ordre. Avez-vous ajouté mobile.js à compiler dans la configuration des environnements? Définir la valeur de config 'config.assets.precompile + =% w (mobile.js)' –

+0

oui, j'ai ajouté juste cela config.assets.precompile < s9gf4ult

+0

Cela ne semble pas correct - il vous suffit de précompiler les ressources de niveau supérieur, celles qui ne sont pas incluses par d'autres ressources principales. Essayez simplement d'ajouter mobile.js. –

Répondre

0

Où est launch_faye_updater appelé à partir?

Je devine que vous pouvez résoudre ce problème en déplaçant cette ligne:

<%= javascript_include_tag "#{Settings.faye.address}/client.js" %> 

En bas l'autre comprennent, comme ceci:

<%= javascript_include_tag "mobile" %> 
<%= javascript_include_tag "#{Settings.faye.address}/client.js" %> 

(Vous pouvez également envisager de créer un nouveau fichier JS compilé avec ces deux fichiers.)

+0

launch_faye_updater est de faye-updater et # {Settings.faye.address} /client.js doit être inclus avant faye-updater – s9gf4ult

+0

Qu'est-ce qui vous fait dire que ça ne marche pas? Vous recevez une erreur JavaScript lorsque vous essayez de charger la page? Pourriez-vous poster cette erreur? (@ s9gf4ult) – drewinglis

+0

Les erreurs sont: "Erreur de référence non interceptée: $ n'est pas défini" comme prévu, car jquery n'est pas inclus lorsque launch_faye_updater est appelée en premier. – s9gf4ult

0

J'ai eu le même problème avec mes dépendances jquery, bootstrap et application. Vous pouvez livrer tous vos modules JS dans l'ordre préféré dans Rails 3.1+. Dans votre exemple, vous souhaitez que jquery.js soit inclus avant mobile.js.

Tout d'abord, supprimez jquery de votre fichier mobile.js.

Ensuite, vous devez ajouter la ligne suivante de code à votre application.rb:

config.assets.precompile += ['mobile.js', 'jquery.js', 'jquery_ujs.js'] 

En ce moment, vous avez tout précompilée et prêt à l'emploi. Votre mobile.js ne comprend pas jquery, vous pouvez l'inclure dans votre ordre de préférence:

<%= javascript_include_tag "jquery" %> 
<%= javascript_include_tag "mobile" %> 

Et voilà!

Questions connexes