【问题标题】:jquery render partial just one time, for second time it not render again just shows previous onejquery 只渲染一次,第二次它不再渲染,只显示前一个
【发布时间】:2013-02-17 12:15:28
【问题描述】:

我必须通过 jquery 为我的场景附加部分我无法使用 ajax 渲染部分,因为它需要控制器的交互并且我被限制不使用控制器。

所以我正在这样做

$('#button_add').click(function(){

  $('#content_form_div').append("
    <%= j render(:partial=> 'pages/content/call_text_phone',
:locals => @locals.merge!(counter: cookies[:counter] + 1 ),
 :formats=>[:html]) %>");
   });

它第一次渲染部分,但第二次它实际上并没有渲染部分。

不使用 ajax 的任何想法。

【问题讨论】:

  • 你能把这些东西放到一个隐藏的元素中并在点击时显示和/或克隆它吗?在我看来这行不通,因为换行符会弄乱 JavaScript。
  • @Juhana 我为问题添加了换行符,而不是在我的代码中:)
  • 是的,但我假设部分包含换行符(可能还有引号)。
  • 不,情况并非如此@Juhana btw 感谢您的回复。我按照我的解决方案下面的说明解决了它

标签: jquery ruby-on-rails views partial-views renderpartial


【解决方案1】:

要在屏幕上重新呈现任何内容,您需要重新加载它(或在 javascript 中重新创建它)给我看,您似乎嵌入了静态 HTML,并且脚本按照它的指示执行。它呈现静态 HTML。

【讨论】:

  • 因为上面有问题的代码描述了我每次都用新值渲染部分,所以它怎么可能是静态页面。
  • 我很确定 '@locals.merge!(counter: cookies[:counter] + 1 )' 将在服务器上进行评估并作为文字值输出。在浏览器中检查生成的html,您将能够查看是否是这种情况
  • 是的,我也认为 cookie 的值不会在每次呈现局部时都发生变化,我找到了一个很好的方法来代替这种方式
【解决方案2】:

在我自己的解决方案上花时间之后,由于代码混乱和更多代码行,事情变得疯狂。

对于嵌套表单,我将其作为解决方案,因为它也不需要控制器的交互。

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

还有一件事,我在 jquery 中添加了 getRandomInt 来创建唯一的 id,这是为了避免即时创建的字段的时间戳重复而没有时间差。

function add_fields(link, association, content) {
 // I changed below line by adding getRandomInt method to assure unique id. 
  var new_id = new Date().getTime() + getRandomInt(1, 5000);
  var regexp = new RegExp("new_" + association, "g")
  $(".all_fields").append(content.replace(regexp, new_id));
}

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2021-07-15
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多