首先,您需要查看该输入字段以查看它是否已更改。所以,假设:
- 存储选择器的 id 为“存储”
- 存储选择器将“存储”的 id 作为其值
...你可以把它放在你的storage.coffee.js
文件中:
jQuery ->
$('select#storage').change ->
storage_id = $('option:selected',this).val()
$.get 'storages/' +storage_id+ '/orders.js'
然后,假设 Orders 嵌套在 storage 下,如果您的 OrdersController 如下所示:
OrdersController < ApplicationController
def index
@storage = Storage.find(params[:storage_id])
@orders = @storage.orders
end
end
...如果您有部分app/views/orders/_order.html.erb
...
...如果您div#orders
的页面上有一个您希望将订单放入...
...那么你应该能够app/views/orders/index.js.erb
像这样制作一个文件:
$('div#orders').html('<%= escape_javascript(render @orders) %>');
这应该为属于给定存储的订单的每个实例呈现部分副本,并将其附加到存储选择器之后的 dom。
发生了什么:当更改选择菜单时,它会将JS触发到给定存储的订单索引请求。然后,该请求将自动尝试提供 index.js 页面,并在该视图可用的控制器中设置实例变量。该视图中的 js 将在插入任何插值 ruby 后执行,因此您可以使用 rails 函数(如render @orders
),然后将这些函数的输出通过 注入到 dom 中$('div#orders').html('your rendered orders will be inserted in here by rails')
。
显然,您必须对其进行调整以适合您的页面,我只是猜测您页面的哪些元素被调用等,但是这个基本概念应该可以正常工作。如果您有任何问题,请告诉我。