0

了解しました。私はJS/JQuery /Coffeescriptnoobです。これはおそらく誰かにとって簡単なポイントです。

RBateのネストされたフォームモデルのレールキャストの実装に成功したので、これをより単純なモデルで再現しようとしています。支部には多くの郡があります。

chapters.js.coffee次のコードのファイルがあります。

jQuery ->
  $('form').on 'click', '.remove_fields', (event) ->
    $(this).prev('#destroy').val('1')
    $(this).closest('fieldset').hide()
    event.preventDefault()

このコードは、他のモデルでも問題なく機能します。しかし、ここではありません。

_chapters_form.html.erb:

<div class="row span12">    
<%= form_for(@chapter) do |f| %>
    <%= render 'shared/error_messages', object: f.object %>
    <div class="span2"><strong>Chapter name:</strong></div>
    <div class="span6"><%= f.text_field :name %></div>
    <div class="span2"><strong>Chapter Number:</strong></div>
    <%= f.number_field :chapter_num, class: "span2" %>
</div>
<div class="row span12">
<div class="span12">
    <%= f.fields_for :counties do |builder| %>
        <%= render 'county_fields', f: builder %>
    <% end %>
</div>
    <% if f.object.new_record? then link = 'Add the Chapter' else link = 'Update Chapter' end %>
      <%= f.submit "#{link}", class: "btn btn-large btn-primary" %>
      <%= link_to "Cancel", chapters_path, class: "btn btn-large btn-primary" %>
    <% end %>
</div>

と:

_county_fields.html.erb:

<fieldset>
<div class="well span12">
    <div class="row span12">
        <div class="span3">County Number: <br /><i>(6-digit FIPS code)</i></div>
        <div class="span2"><%= f.number_field :county_num %></div>
        <div class="span2">County Name:</div>
        <div class="span5"><%= f.text_field :name %></div>
    </div>
    <div class="row span12"><hr></div>
    <div class="row span12">
        <div class="span6">Move to new Chapter:</div>
        <div class="span6"><%= select(:county, :chapter_id, Chapter.all.collect {|c| [c.name, c.id]}) %></div>
    </div>
    <div class="row span12">
        <div class="pull-right">
            <%= f.hidden_field :_destroy, id: "destroy" %>
            <%= link_to "remove county", "#", class: "remove_fields" %>
        </div>
    </div>
</div>
</fieldset>

JSにエラーはありません。繰り返しになりますが、noobは話しますが、JSが呼び出されているようには見えません。クリックすると、URIにが<%= link_to "remove county", "#", class: "remove_fields" %>追加されます。#

私は何が間違っているのですか?

要求に応じて、どちらも機能しないフィドルのHTML 。

4

2 に答える 2

1

HTMLが壊れています。フォーム要素の前にdivを開き、フォームを閉じる前に閉じます。フォーム要素をコンテナdivのすぐ内側まで移動すると、機能します。

<body>
  <div class="container-fluid">
    <form accept-charset="UTF-8" action="/chapters/7" class="edit_chapter" id="edit_chapter_7" method="post">
      <div class="row-fluid">
...
     </div>
    </form>
  </div>
</body>

この種の単純な間違いを避けるために、HTMLのインデントにはもっと注意を払う必要があります。コード形式が重要です。

于 2013-01-27T00:22:48.593 に答える
1

それらが表示されるページは、それらがどのようにレンダリングされるかに関係なく、含まれるためのchapters_controllerforのアクションである必要がありchapters.js.coffeeます。私の賭けは、コードが正常に見えるため、スクリプトがまったく含まれていないことです。このコードで問題が発生しているページを確認してください。

jQuery ->
  console.log "included chapters.js.coffee"
  $('form').on 'click', '.remove_fields', (event) ->
    console.log "clicked .remove_fields"
    $(this).prev('#destroy').val('1')
    $(this).closest('fieldset').hide()
    event.preventDefault()

また、レンダリングされたHTMLを質問に投稿してください

于 2013-01-26T19:11:57.333 に答える