0

私は3つのチェックボックスを持つビューを持っています:

<div class="tourny-games">

    <h4>Games</h4>

    <div class="checkboxOptions games show-tabs">

      <div class="show-tab">
        <div class="checkbox uncheckBoxed">
          <input id="" name="" onclick="toggleCheckboxImage(this, &#x27;&#x27;);" type="checkbox" value="1" />
        </div>
        <img src="https://s3.amazonaws.com/...iconlol.png.jpg" class="game-logo-label" />
      </div>

      # two more checkboxes here

    </div>

</div>

タブを作成する:

<div class="tabs">
  <% @games.each do |game| %>  
    <a href="#<%= game.striped_name %>" game="<%= game.id %>" game-type="<%= Game::TEAM_GAMES.include?(game.name) ? "team" : "single" %>" class="tab" style="<%= "display:none;" unless @tournament.game_ids.include?(game.id) %>">
      <%= game.name %>
    </a> 
  <% end %>  
</div>

このjquery経由:

$('.show-tabs .show-tab').live('click', function(){
  var tab = $('.tabs .tab:nth-of-type(' + ( $(this).index() + 1 ) + ')');
  ...      
  if ($(this).find('.checkbox').hasClass('checkBoxed')){
    tab.show();
    ...
  } else {
    tab.hide();
  }
});

この回答に基づいて、設定する次のコードがあります@game_type

コントローラ:

def game_type
  @game_type = params[:game_type]
end

jquery:

if ($(this).find('.checkbox').hasClass('checkBoxed')){
  tab.show();
  $.get('tournaments/game_type?game_type='+tab.attr("game-type"))

でテストtab.attr("game-type")alertたので、必要な変数をプルしていることがわかります-またはのいずれteamかを返しますsingleが、ページのさらに下にある他のRailsコードで条件付きチェックを行う必要があります-どうすればできますか?

たとえば、次の疑似コードは、私が行う必要があることの 1 つを示しています。

if @game_type == "team"
  "Team Name"
else
  "Player Name"
end

変数がRailsでロードされているため、空白になることはわかってい@game-typeますが、AJAXの出番であり、少し混乱している場所でもあります。 この質問は、私が求めていることに関連しているように見えますが、自分のコードで動作させることができないほど十分に異なっています。

4

1 に答える 1

1

あなたが書いたものを見ると、システムのいくつかの側面を混乱させているように思えます。私が何を意味するのかを簡単に説明し、できれば解決策を説明します。

  1. 私は MVC を「モジュール式」と呼んでいます。各要素がそれぞれの役割を果たしている場合に最適に機能します。
  2. MVCの「コントローラー」の側面は、ビューからロジックを処理するためにあります
  3. したがって、ロジックベースのソリューションを作成する必要がある場合は、コントローラーを使用する必要があります
  4. 私の意見では、Ajax は疑似ビューとして機能します。つまり、ページをリロードせずにリクエストを作成します。コントローラーからの応答のみを送信および処理する必要があります(ロジックを実行しません)

あなたが言ったことから、条件付きJSをgame-type.js.erbコントローラーから独自にロードする方がよいようです。このような:

def game_type
  respond_to do |format|
      format.js { @game_type = params[:game_type] }
  end
end


#game_type.js.erb
#handle your conditional JS here
alert(<%=j @game_type %>)

これを次のように JS に結び付けることができます。

$(document).on('click', '.show-tabs .show-tab', function(){
  var tab = $('.tabs .tab:nth-of-type(' + ( $(this).index() + 1 ) + ')');
  ...      
  if ($(this).find('.checkbox').hasClass('checkBoxed')){
    tab.show();
    $.get('tournaments/game_type?game_type='+tab.attr("game-type"))
  } else {
    tab.hide();
  }
});

これにより、アラート ボックスが出力されます。これは、コントローラーから変数を取得していることを意味します。それから、あなたがそれで何をしたいかはあなた次第です!

于 2013-10-21T08:48:58.490 に答える