2010-12-21 18 views
1

首先,对我的英语感到抱歉。我是一个正在改善的巴西人。用UJS创建帮手标签

我想创建一个名为“collection_cascading_select”的帮助标记。 该助手类似于“collection_select”,但他还有一个名为“source”的参数。 “源”是视图中的其他集合。

在“源代码”中选择了其他选项,JavaScript函数需要运行以获取其值。然后填充同意该值的“collection_cascading_select”集合。

这让人困惑!我在这个问题上有一个星期,我的巴西兄弟不帮我。

谢谢!

[编辑]

@Samo

我得到它的工作,但也有一些变化。

var success = function(response) { 

for (var item in response){ 

    var id = response[item].breed.id <-------------------- 
    var name = response[item].breed.name <------------------- 
    var option = $(document.createElement('option')).val(id).html(name) 
    dependentDropDown.append(option) 
    } 
} 

我不明白FOR IN是如何工作的。

回答

0

这听起来像你正在寻找的答案是一个自定义表单生成器。您可以创建表单构建器并从Rails表单构建器继承,然后将该表单构建器设置为应用程序中的默认值。然后,您可以定义一个名为dependent_dropdown或cascading_selection等的元素。此元素可能会采用源下拉列表的ID。你的助手会输出一个collection_select,但它也会输出一些JavaScript,当源代码下拉改变时会触发AJAX调用。

当然,你不必这样做。您可以只使用一个collection_select,在源代码下拉列表中添加一些属性(例如:class => 'source_for_dependent', :dependent => some_id),然后在application.js中挂接一些查找具有source_for_dependent类的集合的JavaScript,并在该事件触发时抓取该ID dependent属性并触发AJAX调用。

无论哪种方式,这里是你的JavaScript(使用jQuery)

$('select.source_for_dependent').change(function() { 
    var id = // get the id of the dependent dropdown, perhaps by $(this).attr('dependent') 
    var dependentDropDown = $('#' + id); 
    dependentDropDown.empty(); 
    var success = function(response) { 
    for (var item in response) { 
     var option = $(document.createElement('option')).val(item.val).html(item.text); 
     dependentDropDown.append(option); 
    } 
    } 

    $.get('/some_controller/some_action/' + $(this).val(), success); 
} 

的成功处理程序被传递到jQuery的get方法的例子。它将JSON响应作为参数。我们循环回应,并为每个项目创建一个option,将值和文本从项目中拉出,然后将其附加到依赖项下拉菜单中。你的控制器可以是这个样子:

def some_action 
    @obj = SomeClass.find(params[:id]) 
    respond_to do |format| 
    format.js { render :json => @obj } 
    end 
end 

编辑

哪个控制器,你的目标是你。比方说,下拉式A指向资源A,下拉式B指向资源B.类型为A的对象应该有一个B类型的对象列表。如果您要追踪对象Ashow操作,则对象Aas_json方法需要包括其B关联。This article显示了这个例子。

否则,您可以将资源Bindex操作作为目标。使B嵌套的资源A将是一个简单的方法来键入A的id以获取B类型的所有对象,它们的外键指向A

0

你可能会寻找这样的事情: Ruby on Rails Country/State Select Enigma

+0

http://stackoverflow.com/questions/3332474/how-to-make-ajax-calls-with-rails-3-using-remote-function – 2010-12-21 22:54:02

+0

像这样,remote_function被释放。 请参阅第三个答案:http://stackoverflow.com/questions/3332474/how-to-make-ajax-calls-with-rails-3-using-remote-function 我想做一些最简洁的事情像帮手一样。帮助者将完成ajax操作。这是可能的 ??? – 2010-12-21 23:07:12