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代码中。
- rails上的ruby AbstractController :: Helpers :: MissingHelperError:缺少帮助文件助手//
- sass-rails需要链轮2.0.0但是轨道4.1.0需要链轮2.12.1
- ActiveRecord并使用reject方法
- Heroku rails 3.1 app – 在本地编译资产与在slug编译期间编译资产
- ActiveRecord可以远程连接到PostgreSQL并保护数据库密码吗?
- Web应用程序无法启动乘客错误(Apache2) – 引用不存在的Ruby补丁
- Sinatra子目录视图
- 使用apache2(或nginx + apache2)配置gitlab
- Rails postgresql数据库连接失败