RJS 模板的另种用法

RJS 模板会膨胀的,但在你应用程序的其它部分使用这些方法却很好。是否可以在你的 ptototype 回调或静态 javascipt 文件内使用奇妙的 javascript 辅助方法呢?

下面是个例子:

<%= link_to_function('reorder', update_page do |page|

page.send :record, sortable_element('items',

:url => viewbox_url(:action => 'reorder',

:id => @view.id)).match(/Sortable.create[^n]+/)

page.hide 'contents_controls'

page.show 'contents_reorderable'

end) %>

如果你深入探究 RJS 模板是如何工作的,它基本上执行的代码在一个 update_page 块内。在 #link_to_function 内我所要做的是在 link onclick 事件内输出结果。然而,若你希望 HTML 整洁些的话。我们可以把它放在一个 javascript 库内。

 

创建控制器:

 

我们希望 URL 看起来与任何旧的 javascript ‘javascripts/foo.js’ 类似。

# generate the controller first

# ./script/generate controller javascripts

 

# create a route

map.connect 'javascripts/:js', :controller => 'javascripts', :action => 'show',

:requirements => { :js => /.js$/ }

 

# the controller action

def show

headers["Content-Type"] = 'text/javascript'

render :action => params[:js][0..-4]

end

 

# the rhtml view

function reorder() {

<%= sortable_element('items', :url =>

viewbox_url(:action => 'reorder', :id => @view.id)).match(/Sortable.create[^n]+/) %>

<% update_page do |page|

page.hide 'contents_controls'

page.show 'contents_reorderable'

end -%>

}

 

 

还有什么?

你可以打开页面缓存以便不用每次都渲染 javascript 视图。这就是为什么用 .js 扩展名定义路由是必须的。如果对你当前静态内容缓存 js 文件有问题的话,可以给你的 javascript 控制器一个不同的路径。

现在你有了这个 javascript 控制器,你可以使用它来加强其它的 javascript 函数,如 AJAX 调用。特别是如果你喜欢使用 Behavior 库来添加回调,这会让你感到相当方便。

 

http://habtm.com/articles/2005/12/15/another-use-for-rjs-templates

http://my4java.itpub.net/post/9983/215442

你可能感兴趣的:(JavaScript,html,工作,Ajax,.net)