Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 Rails 4-在呈现部分内容后运行代码的事件_Javascript_Jquery_Ruby On Rails_Ajax_Partials - Fatal编程技术网

Javascript Rails 4-在呈现部分内容后运行代码的事件

Javascript Rails 4-在呈现部分内容后运行代码的事件,javascript,jquery,ruby-on-rails,ajax,partials,Javascript,Jquery,Ruby On Rails,Ajax,Partials,我有一个js.erb文件,它是通过控制器动作用ajax调用的。js.erb文件呈现一个部分。在分部中是基于模型生成的数据属性。我需要一种仅在呈现分部后运行代码的方法,因为代码正在使用数据属性中的信息 项目\u controller.rb def remove_tag @item = Item.find_by_id(params[:id]) //code to remove tag from item @item.save respond_to do |form

我有一个js.erb文件,它是通过控制器动作用ajax调用的。js.erb文件呈现一个部分。在分部中是基于模型生成的数据属性。我需要一种仅在呈现分部后运行代码的方法,因为代码正在使用数据属性中的信息

项目\u controller.rb

  def remove_tag
    @item = Item.find_by_id(params[:id])
    //code to remove tag from item
    @item.save
    respond_to do |format|
      format.js
      @item.reload
    end
  end
$("#taglist").html('<%= escape_javascript(render partial: "items/tag_list", locals: {item: @item}) %>');
//the code below needs to be run after the above partial is rendered
$('#add-tag').rules("add", {
  tagUniqueness: $('#taglist').data('tag-list').split(', ')
});
<div id="taglist" data-tag-list="<%= item.all_tags_list %>">
  //more html
</div>
删除标签js.erb

  def remove_tag
    @item = Item.find_by_id(params[:id])
    //code to remove tag from item
    @item.save
    respond_to do |format|
      format.js
      @item.reload
    end
  end
$("#taglist").html('<%= escape_javascript(render partial: "items/tag_list", locals: {item: @item}) %>');
//the code below needs to be run after the above partial is rendered
$('#add-tag').rules("add", {
  tagUniqueness: $('#taglist').data('tag-list').split(', ')
});
<div id="taglist" data-tag-list="<%= item.all_tags_list %>">
  //more html
</div>
$(“#标记列表”).html(“”);
//下面的代码需要在呈现上述部分后运行
$('#添加标记')。规则(“添加”{
标记唯一性:$('#标记列表')。数据('标记列表')。拆分(','))
});
\u tag\u list.html.erb

  def remove_tag
    @item = Item.find_by_id(params[:id])
    //code to remove tag from item
    @item.save
    respond_to do |format|
      format.js
      @item.reload
    end
  end
$("#taglist").html('<%= escape_javascript(render partial: "items/tag_list", locals: {item: @item}) %>');
//the code below needs to be run after the above partial is rendered
$('#add-tag').rules("add", {
  tagUniqueness: $('#taglist').data('tag-list').split(', ')
});
<div id="taglist" data-tag-list="<%= item.all_tags_list %>">
  //more html
</div>

//更多html

按照现在的方式,.rules方法使用的是在部分更新之前存在的html数据。

要将哈希或数组从Ruby转换为javascript,可以使用
。\u json
,因为json基本上是javascript的一个子集

$('#add-tag').rules("add", {
  tagUniqueness: <%= js @badge.all_tags_list.to_json %>
});
$('#添加标记')。规则(“添加”{
标记唯一性:
});

要将哈希或数组从Ruby转换为javascript,您可以使用
。\u json
,因为json基本上是javascript的一个子集

$('#add-tag').rules("add", {
  tagUniqueness: <%= js @badge.all_tags_list.to_json %>
});
$('#添加标记')。规则(“添加”{
标记唯一性:
});

这种类型的功能适用于javascript/jquery中的

回调函数在当前效果100%完成后执行

我们使用回调在ajax加载后执行函数(必须保持异步)。如果你能让他们工作,他们是非常有效的

有一个:

$(“#标记列表”).html(“”).promise().done(函数(){
$('#添加标记')。规则(“添加”{
标记唯一性:
});
});

这种类型的功能适用于javascript/jquery中的

回调函数在当前效果100%完成后执行

我们使用回调在ajax加载后执行函数(必须保持异步)。如果你能让他们工作,他们是非常有效的

有一个:

$(“#标记列表”).html(“”).promise().done(函数(){
$('#添加标记')。规则(“添加”{
标记唯一性:
});
});

您的视图应该只显示模型。如果您的视图正在更改模型,那么您正在做一些非常错误的事情,因为它严重违反了MVC。我的视图没有更改模型,模型将通过删除标记操作进行更改。
taguniversity:“
-这似乎是一个更直截了当的解决方案,因为您只需从rails而不是从DOM获得它。@max我正在尝试使用您的建议获得正确的输出。我需要在@item上使用的方法是.all\u tags\u list。(来自)我正在使用
remove_tag.js.erb
文件中的console.log进行检查。我尝试了
console.log(“”
,它返回
tag1、tag2、tag3
。如何将其设置为字符串数组?我尝试追加.split(“,”),但它给了我
[[[“tag1”、“tag2”、“tag3”]]
很抱歉,我看错了你的JS,以为你想要一个字符串。您可以使用
.to_json
将Ruby数组转换为javascript(因为有效的json就是有效的javascript)。您的视图应该只显示模型。如果您的视图正在更改模型,那么您正在做一些非常错误的事情,因为它严重违反了MVC。我的视图没有更改模型,模型将通过删除标记操作进行更改。
taguniversity:“
-这似乎是一个更直截了当的解决方案,因为您只需从rails而不是从DOM获得它。@max我正在尝试使用您的建议获得正确的输出。我需要在@item上使用的方法是.all\u tags\u list。(来自)我正在使用
remove_tag.js.erb
文件中的console.log进行检查。我尝试了
console.log(“”
,它返回
tag1、tag2、tag3
。如何将其设置为字符串数组?我尝试追加.split(“,”),但它给了我
[[[“tag1”、“tag2”、“tag3”]]
很抱歉,我看错了你的JS,以为你想要一个字符串。您可以使用
.to_json
将Ruby数组转换为javascript(因为有效的json就是有效的javascript)。我使用的是
raw
而不是
js
。一个比另一个好吗?在这种情况下,它可能并没有真正的区别-我不认为你可以通过创建一个真正有创意的标记名来进行XSS攻击,因为编码为JSON会逃脱它
raw
可能更快,因为它不使用
gsub
或者除了将字符串标记为安全之外实际上对字符串做任何事情。我使用的是
raw
而不是
js
。一个比另一个好吗?在这种情况下,它可能并没有真正的区别-我不认为你可以通过创建一个真正有创意的标记名来进行XSS攻击,因为编码为JSON会逃脱它
raw
可能更快,因为它不使用
gsub
或者除了将字符串标记为安全之外,实际上对字符串做任何事情。