0

これはファイル dvbd.js.erb にあり、正常に動作します。予想される動作は、Dave div の中に名前と ID のセットがリストされていることです。

<%@dimvers = DimensionVersion.select("name, id").where(:dimension_id => params[:id]).all %>


$("#dave").html("<%= @dimvers.collect { |d| [d.name, d.id]} %>");

これは applications.js にあり、.post は dvbd.js.erb を正常に呼び出します。

jQuery.ajaxSetup({
  'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") }
});

$.fn.subSelectWithAjax = function() {
  var that = this;

  this.change(function() {
    $.post("/dimensions/dvbd", {id: that.val()}, null, "script");
  });
}

$(document).ready(function(){
$("#dimver_dimension_id").subSelectWithAjax();
});

しかし、dvbd.js.erb のコードを次のように変更すると、動作しません。選択ボックス #dimension_id のオプションが変更されることを期待しています。ただし、代わりに、@dimvers がたまたま一致するレコードを返さなかった場合にのみ、選択ボックスをコンテンツ/オプションなしに変更します。その後、#dimension_id は応答しなくなります。

<%@dimvers = DimensionVersion.select("name, id").where(:dimension_id => params[:id]).all %>

$("#dimension_id").html("<%= options_for_select(@dimvers.collect {|d| [d.name, d.id] }).gsub(/n/, '') %>");

show.html.erb のコードは次のとおりです。

<div id = 'hierarchypanel'>
    <%= collection_select(:dimver, :dimension_id, Dimension.all, :id, :title ) %>
    <%= collection_select(:dimension,:id, @dimension_versions,:id, :name)  %>
</div>
4

2 に答える 2

1

HTMLをに渡してみてくださいescape_javascript

$("#dimension_id").html("<%= escape_javascript options_for_select(@dimvers.collect { |d| [d.name, d.id] }) %>");

于 2013-02-04T06:11:44.603 に答える
0

最良の方法は、パーシャルを持ち、パーシャルにselect_tagを持ち、.js.erbからそのパーシャルを呼び出すことです

元:

#_select_partial.erb
<%= options_for_select(@dimvers.collect {|d| [d.name, d.id] }).gsub(/n/, '') %>

#dvbd.js.erb
$("#dave").html("<%= raw escape_javascript(render(:partial => 'select_partial')) %>")
于 2013-02-04T06:05:21.237 に答える