Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用UJS创建helper标记_Javascript_Ruby On Rails_Ruby_Ajax_Ruby On Rails 3 - Fatal编程技术网

Javascript 使用UJS创建helper标记

Javascript 使用UJS创建helper标记,javascript,ruby-on-rails,ruby,ajax,ruby-on-rails-3,Javascript,Ruby On Rails,Ruby,Ajax,Ruby On Rails 3,首先,对不起我的英语。我是一个正在进步的巴西人 我想创建一个名为“collection\u cascading\u select”的助手标记。 该助手类似于“collection_select”,但他还有一个名为“source”的参数。 “源”是视图中的另一个集合 即使在“源”中选择了另一个选项,JavaScript函数也需要运行以获取其值。然后填充该值的“集合\u层叠\u选择”集合 这让人困惑!我在这个问题上已经有一个星期了,我的巴西兄弟们没有帮我 谢谢 [编辑] @萨莫 我让它工作,但有一些

首先,对不起我的英语。我是一个正在进步的巴西人

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

即使在“源”中选择了另一个选项,JavaScript函数也需要运行以获取其值。然后填充该值的“集合\u层叠\u选择”集合

这让人困惑!我在这个问题上已经有一个星期了,我的巴西兄弟们没有帮我

谢谢

[编辑]

@萨莫

我让它工作,但有一些变化

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)  
  }  
}
var成功=功能(响应){
用于(响应中的var项目){

变量id=响应[项目].bride.id听起来您想要的答案是自定义表单生成器。您可以创建表单生成器并从Rails表单生成器继承,然后将该表单生成器设置为整个应用程序的默认值。然后您可以定义一个名为dependent_dropdown或cascading_selection的元素,等等。此元素可能会获取源下拉列表的id。您的助手将输出一个集合,但它也将输出一些JavaScript,当源下拉列表更改时,这些JavaScript将触发AJAX调用

当然,您不必这样做。您可以使用一个集合来选择,将一些属性添加到源下拉列表中(即
:class=>'source\u for\u dependent',:dependent=>some\u id
),然后在application.js中连接一些JavaScript,这些JavaScript使用
source\u for_dependent
类查找集合,当
onchange
事件触发时,它从
dependent
属性获取id并触发AJAX调用

不管怎样,下面是一个JavaScript示例(使用jQuery)

成功处理程序被传递到jQuery的
get
方法中。它将JSON响应作为参数。我们循环响应,并为每个项创建一个
选项,从项中提取值和文本,然后将其附加到依赖下拉列表中。您的控制器可能如下所示:

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
的对象列表。如果您要针对对象
A
执行
show
操作,那么对象
A
as_json
方法需要包括其
B
关联。显示了这方面的示例


否则,您可以针对资源
B
索引
操作。使
B
成为
a
的嵌套资源将是一种简单的方法,可以键入
a
的id,以获取所有类型
B
的对象,这些对象具有指向
a

的外键。当然,我错了。您必须给出t“源”下拉列表是一个不同的类…我想不出一个好名字,可能是“源”或类似的名字。比如,如果我的答案有用,可以用一个向上的投票或一个绿色的勾号吗?:)在for-In迭代中,项返回一个字符串,而不是一个对象。因为这样,我无法处理数据。奇怪的是,我在没有迭代的情况下会得到工作。其他我需要指定数据类型(json)在$.get to work中。感谢您的有效帮助。您需要知道响应对象中包含的内容。在处理程序函数中设置断点并使用firebug进行检查将向您展示如何访问对象的属性。如果您需要关联,您可能必须覆盖模型中的as_json方法以包含此外,还有一种方法可以指定所有XHR请求都接受JSON,这样您就不必为每个AJAX调用指定JSON。请参见此处:我不会从电子邮件中的(这个)问题中获得更新。奇怪的是,“如果您需要关联,您可能必须在您的模型中重写as_JSON方法以包含它们。”。抱歉,我不理解这一点。
def some_action
  @obj = SomeClass.find(params[:id])
  respond_to do |format|
    format.js { render :json => @obj }
  end
end