こんばんは
JS パーシャルをレンダリングするときに、マニフェスト ファイル内の JavaScript 関数にアクセスできないという問題があります。以下は、現在の article#index ページを機能させるファイルです。
マニフェスト ファイル:
assets/javascripts/option_set_interface.js.coffee.erb
on_load = ->
load_article_click_handlers $('ul.index li.article')
$(document).ready on_load //standard DOM refresh
document.addEventListener 'page:change', on_load //turbolinks
load_article_click_handlers = (jQuery_object) ->
.. Do some stuff...
load_article_click_handlersは create.js.erb でアクセスしたい関数です
assets/javascript/articles.js.coffee
//= require option_set_interface
article_controller.rb:
class ArticlesController < ApplicationController
def create
@article = Article.new(article_params)
@article.save
respond_to do |format|
format.html { redirect_to articles_path }
format.js { render 'create' }
end
end
def index
@articles = Article.all
end
protected
def article_params
params.require(:article).permit(:title)
end
end
ビューとパーシャル:ビュー/記事/
index.html.haml
- provide(:title, 'Article list')
%h1 Article list
.row
.aside.span3
.row
%ul.index
- @articles.each do |article|
= render article
= render 'new'
_article.html.haml
%li.article
%input{ type: 'hidden', value: article.id, name: 'article_id' }
= article.id
= article.title
_new.html.haml
= form_for Article.new, remote: true, html: { id: 'new_article_form' } do |f|
= f.label :title
= f.text_field :title
= f.submit 'Create', class: 'btn btn-large btn-primary'
create.js.erb (問題の場所)
new_list_item = $('<%= escape_javascript( render @article ) %>')
new_list_item.prependTo('ul.index').slideDown()
load_article_click_handlers(new_list_item) //this is the line that breaks the code
create.js.erb で load_article_click_handlers を呼び出そうとするまで、コードはうまく機能します。Railsの魔法のajaxを使っているため、デバッグ情報を取得する方法がわかりません。応答をキャプチャする方法がよくわかりません。
create.js は明らかに jquery にアクセスできます。しかし、私のカスタム関数を受け入れないようです。ヘルプやアドバイス、特に Rail の ajax でレンダリングされた JS をデバッグする方法に関するヒントをいただければ幸いです。現在、load_article_click_handlers にアクセスしようとすると、スクリプトがまったく実行されません。
私が試したこと:
create.js.erb で javascript_inlude_tag 'option_set_interface' を使用して、'//= require option_set_interface' を application.js に追加します。
編集
1 つの修正が見つかりましたが、問題は解消されませんでした。