2016-09-08 1 views
0

Utilisation de Rails 4.2 et de la gemme Draper. J'ai un décorateur:Rails injecter le lien dans le composant html

def status_link 
    if enabled? 
     h.link_to 'Disable', h.disable_company_path(id), data: {confirm: 'Are you sure?'}, method: :put, remote: true 
    else 
     h.link_to 'Enable', h.enable_company_path(id), method: :put, remote: true 
    end 
    end 

Je veux rendre le lien en vue js:

var cell = $("#my-id"); 
cell.html(<%= @my_model.decorate.status_link %>); 

Mais le lien n'est pas injecté dans la cellule. La cellule est vide.

Si j'imprimer dans la console la méthode status_link il fonctionne:

<%= pp @my_model.decorate.status_link %> 
"<a data-confirm=\"Are you sure?\" data-remote=\"true\" rel=\"nofollow\" data-method=\"put\" href=\"/companies/210/disable\">Disable</a>" 

Si je tente d'injecter un entier cela fonctionne:

cell.html(<%= @my_model.id %>); 

J'ai aussi essayer d'utiliser des guillemets doubles:

cell.html("<%= @my_model.decorate.status_link %>"); 

Mais le résultat est le même. J'ai essayé d'inspecter le code avec la console du navigateur, mais aucune erreur ne s'affiche

Pourquoi le lien n'est pas injecté alors que nombre entier fonctionne bien?

+1

Vérifiez la console de votre navigateur, vous verrez une erreur JS. Inspectez également la réponse de cet appel ajax. Il contient un javascript invalide. –

+0

Indice: vous avez besoin de devis. –

+0

Juste tryied .. avec des guillemets doubles ne fonctionnent pas aussi – user1066183

Répondre

1

suivant est incorrect:

cell.html(<%= @my_model.decorate.status_link %>); 

Vous devez appeler la fonction javascript avec une chaîne, à savoir:

cell.html("<%= @my_model.decorate.status_link %>"); 

Le point de livraison ici ne doit pas être mémoriser cette erreur spécifique, mais plutôt , apprendre à déboguer votre code.

Accédez à la page correspondante dans votre application et ouvrez la console du navigateur. Maintenant, effectuez toute action qui devrait déclencher ce javascript - comme une actualisation de la page, ou en cliquant sur un bouton. Vous devriez voir une erreur dans le journal; quelque chose comme ceci:

Console error

Cela inclut également un lien vers la ligne de code que l'erreur provient de - à savoir dans votre cas, le code cell.html(<%=.....

+0

J'ai essayé d'inspecter: pas d'erreurs. J'ai aussi utilisé des doubles cités mais le résultat est le même – user1066183

+0

J'ai utilisé des guillemets simples et cela fonctionne – user1066183