在restful / resourceful控制器中,jails模板的Rails最佳实践是什么?

时间:2010-06-15 13:52:01

标签: javascript ruby-on-rails templates rest resources

首先,2种常见(基本)方法:

# returning from some FoosController method
respond_to do |format|
  # 1. render the out a json representation
  format.json { render :json => @foo }

  # 2. render an RJS template, say update.js.erb
  format.js { render }
end

# in update.js.erb
$('#foo').html("<%= escape_javascript(render(@foo)) %>")

这些显然很简单,但我想说明我在说什么。我相信这些也是rails 3中默认响应者所期望的情况(动作命名的默认模板或在资源上调用_#{format}。)


问题

使用1,您可以在视图方面获得完全的灵活性而无需担心模板,但您必须通过javascript直接操作DOM。你无法访问助手,部分等等。

使用2,您可以使用部分和帮助程序,但是您可以绑定到一个模板(默认情况下至少)。所有使JS调用FoosController的视图都使用相同的模板,这并不完全灵活。


其他三种方法(没有一个真正令人满意)

1。)事先将我需要的部分/帮助转移到javascript中,然后将它们插入到页面中,使用字符串替换来定制它们返回的结果(在名称,id等中进行修改)。

2.)将视图逻辑放在模板中。例如,查找特定的DOM元素并执行一项(如果存在),如果不存在,则执行另一项。

3.。)在控制器中放置逻辑以呈现不同的模板。例如,在多态属于可以为comments / foo或posts / foo调用更新的地方,渲染commnts / foos / update.js.erb与posts / foos / update.js.erb。


我已经使用了所有这些(可能还有其他我没想过的)。通常在同一个应用程序中,这会导致令人困惑的代码。这种事情有最好的做法吗?这似乎是一个常见的用例,您希望通过不同视图中的Ajax操作调用控制器,并期望发生不同的事情(无需执行诸如转义和字符串替换部分和帮助客户端等繁琐的事情。)< / p>

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

最佳做法是让您的Web UI使用RESTful API。也就是说,使用在客户端中运行的JavaScript来获取和放置JSON格式的资源,就像第三方可能使用RestClient获取并以JSON格式放置资源一样。这意味着您在服务器上没有.rjs.js.erb模板 - 您可能会使用Mustache或Handlebars或jQuery模板,以及嵌入(或静态链接到)HTML的粘合JavaScript最初发送给Web客户端的页面。

当然,使用remote => true,转到服务器并呈现JavaScript代码模板以生成将在客户端上执行的JavaScript的快速而简单的方法更容易。这段时间相当不错。但是我们现在需要用于数据格式的JavaScript,而且我们现在拥有卓越的功能,可以用JSON格式提取数据并在客户端中呈现模板。

答案 1 :(得分:0)

不确定这是否适合您,但我会执行以下操作:

  1. 使用ERB生成.js模板,这些模板将是静态的
    1. 模板可以是胡子,jaml,jQuery模板或其他。
  2. 使用rake任务生成所有模板并从中创建静态.js文件。
  3. 包含这些静态文件,它们将由浏览器缓存。
  4. 使用json数据填充模板,并包含生成的html。
  5. 这假设模板实际上可以是静态的,这取决于手头的情况。但通常这应该有用。