Руби ж / Синатра: что такое эквивалент a. js.Эрб с рельсов?
.JS.erb-это хорошо, потому что вы можете использовать их для замены частей страницы без необходимости покидать текущую страницу, что дает более чистый и незаполненный вид сайту / приложению.
Есть ли способ использовать их в Синатре? или эквивалент?
3 ответов:
Основываясь на вашем описании, я предполагаю, что вы хотите, чтобы части страницы редактировались и заменялись с помощью AJAX. Если это неверно, пожалуйста, уточните.
Я делаю это в моих приложениях Sinatra, включая (мою собственную) библиотеку AJAXFetch jQuery и пишу код, как показано ниже. Это позволяет мне использовать частичное как при рендеринге страницы изначально, так и при редактировании через AJAX, для максимальной сухости. Библиотека AJAXFetch обрабатывает все AJAX fetch/swap только через разметку, без необходимость писать пользовательские JS на страницах, которые его используют.Помощники / партиалы.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Маршруты / ошибка.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Просмотры / ошибка.haml
#main #bug.section = partial :_bugtitle .section-body = partial :_bugdescription <!-- many more partials used -->Просмотры/_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 (). А-ля (назвать mypage.JS.erb):
erb "mypage.js".to_symГрязно, но работает.
Синатра действительно не предназначены для полной структуры стека. Он должен очень быстро вывести вас на дорогу. Вы можете использовать erb отдельно,а затем загрузить его в свой код sinatra.
Comments