我们应用程序中的许多 Rails 视图通过 AJAX 填充它们自己,并且它们的数据的第一次呈现来自在 jquery$(document.ready)
事件上运行的 javascript 调用。我们对此感兴趣的视图本质上显示了一个表格数据列表(例如收件箱、搜索结果列表等)。
我们希望在不进行 AJAX 调用的情况下预渲染结果的第一页,但我们希望能够在不重新加载整个页面的情况下重新填充视图。这并不难,但它似乎需要在应用程序的不同部分编写单独的代码来做同样的事情:一次在视图中绘制初始数据集(来自初始render
调用),再一次在用于绘制新数据集的 Javascript(动态清除旧 DOM 并用新的 HTML 替换它)。
目前,javascript 会克隆一个隐藏的(带有style='display: none'
)模板元素(通常是 a div
),设置每个字段的值,并将新元素添加到 DOM。这很好用,但是如果我们想在渲染之前预填充视图,我们必须在 rubyfied ERB 块中编写模板对象的另一个副本(例如@messages.each do |m|
)。如果模板被更改,则 ERB 块中的代码必须更改以匹配 -不是很 DRY。
有没有更好的办法?如果是这样,它是什么?
谢谢
汤姆