Ruby w / Sinatra:与rails相同的.js.erb是什么?

.js.erb很不错,因为您可以使用它们来替换页面的某些部分,而不必离开当前页面,从而为网站/应用程序提供更清晰和不受欢迎的感觉。

有没有办法在sinatra中使用它们? 还是等价的?

根据你的描述,我猜你的愿望是让页面的一部分可以编辑并通过AJAX替换。 如果这是错误的,请澄清。

我在我的Sinatra应用程序中通过包含(我自己的) AJAXFetch jQuery库并编写代码来完成此操作,如下所示。 这使我可以在最初渲染页面时以及通过AJAX进行编辑时使用partial,以获得最大的DRYness。 AJAXFetch库仅通过标记处理所有AJAX提取/交换,而无需在使用它的页面上编写自定义JS。

助手/ partials.rb

 require 'sinatra/base' module Sinatra module PartialPartials ENV_PATHS = %w[ REQUEST_PATH PATH_INFO REQUEST_URI ] def spoof_request( uri, headers=nil ) new_env = env.dup ENV_PATHS.each{ |k| new_env[k] = uri.to_s } new_env.merge!(headers) if headers call( new_env ).last.join end def partial( page, variables={} ) haml page, {layout:false}, variables end end helpers PartialPartials end 

路线/ bug.rb

 get '/bug/:bug_id' do if @bug = Bug[params[:bug_id]] # ... haml :bug end end # Generate routes for each known partial partials = %w[ bugdescription bughistory bugtitle fixer pain project relatedbugs status tags version votes ] partials.each do |part| [ part, "#{part}_edit" ].each do |name| get "/partial/#{name}/:bug_id" do id = params[:bug_id] login_required halt 404, "(no bug ##{id})" unless @bug = Bug[id] partial :"_#{name}" end end end post "/update_bug/:partial" do id = params[:bug_id] unless params['cancel']=='cancel' # (update the bug based on fields) @bug.save end spoof_request "/partial/#{params[:partial]}/#{id}", 'REQUEST_METHOD'=>'GET' end 

意见/ bug.haml

 #main #bug.section = partial :_bugtitle .section-body = partial :_bugdescription  

意见/ _bugtitle.haml

 %h1.ajaxfetch-andswap.editable(href="/partial/bugtitle_edit/#{@bug.pk}")= title 

意见/ _bugtitle_edit.haml

 %form.ajaxfetch-andswap(method='post' action='/update_bug/bugtitle') %input(type="hidden" name="bug_id" value="#{@bug.id}") %h1 %input(type="text" name="name" value="#{h @bug.name}") %span.edit-buttons %button(type="submit") update %button(type="submit" name="cancel" value="cancel") cancel 

只需将.js添加到您传递erb()的符号的末尾即可。 一个la(调用mypage.js.erb):

 erb "mypage.js".to_sym 

很脏,但它的工作原理。

sinatra真的不是一个完整的堆栈框架。 它应该让你很快上路。 您可以单独使用erb然后加载到sinatra代码中。