通过从javascript文件调用部分更新html元素

时间:2011-12-18 07:47:07

标签: javascript html ruby-on-rails-3 haml partial

我有一个容器td元素,我使用HTML部分成功填充其他元素,这是在页面加载时完成的。

部分运行在任务对象上,它作为参数获取,并决定要添加哪些元素。

完成特定操作后,任务对象会更新,我想通过再次运行部分来更新容器。

我使用更新的任务从我的create.js.haml调用此部分,部分运行并构建正确的更新HTML(我可以在Firebug响应中看到它)。

但实际页面不会更新。我在这里缺少什么?

以下是我的文件:

保存容器html.haml

td

%td#task-categories{ :class => "#{dom_id(task)}_categories"}
  = render 'task_categories_mini_bar', :task => task

部分html.haml

- _MAX_DISPLAYED_CAT = 3
- cat_index = 0
- task.categories.each do |category|
  - if (cat_index == _MAX_DISPLAYED_CAT)
    %td{:style => "padding-left:1px; padding-right:5px"} ...
    - break
  - cat_index += 1
  %td{ :class => "task-category-color_#{dom_id(category)}",
  :style => "width:60px; background:#{category.color}; border:solid 1pt lightblue; border-radius:3pt; text-align:center; "}
    = truncate(category.name, :length => 10)

将他们组合在一起构建此HTML:

<td id="task-categories" class="task_3_categories"> </td>
<td class="task-category-color_category_1" style="width:60px; background:#b8d7ff; border:solid 1pt lightblue; border-radius:3pt; text-align:center; "> cat1 </td>
<td class="task-category-color_category_2" style="width:60px; background:#ff8fcb; border:solid 1pt lightblue; border-radius:3pt; text-align:center; "> cat2 </td>

这里还有另一个问题 - 在第一个容器td下面添加了两个添加的类别tds。如何将它们添加到它而不是之后呢?

现在这里是再次调用partial的create.js.haml

$('td.#{dom_id(@task)}_categories').html(#{escape_javascript(render(:partial => 'tasks/task_categories_mini_bar', :locals => {:task => @task}))})

同样,响应HTML会显示新的HTML,但页面不会更新。

我正在使用rails 3.0.10感谢分配,Eyal。

1 个答案:

答案 0 :(得分:0)

好的,我错过的是“”在我的ajax create.js.haml的部分调用中

$('td.#{dom_id(@task)}_categories').html("#{escape_javascript(render(:partial => 'tasks/task_categories_mini_bar', :locals => {:task => @task}))}")

多数人。