Это проблема у меня .У меня есть эти фильтры, и у каждого из них есть свой собственный URL, который генерируется вспомогательным методом filter_url(filter_name)
.Я хочу обновить эти URL-адреса фильтра асинхронно (AJAX) при изменении URL-адреса (что также происходит асинхронно и передается с помощью API истории HTML5).Однако я не могу понять, как обновить эти URL-адреса фильтров, потому что мне нужно знать имя фильтра, для которого я генерирую URL-адрес (который находится на стороне клиента в атрибуте data-name
DOM), но filter_url
- это сервер-боковая сторона. Надежным решением было бы переместить filter_url
логическую клиентскую сторону, но тогда мне пришлось бы поддерживать как клиентскую, так и серверную логику для обработки URL-адресов фильтров, которые вовсе не СУХИЕ. Итак, с учетом сказанного, возможно ли то, что я пытаюсь сделать, или я подхожу к этому неправильно?Спасибо вам тысячу кучек овса с медом!
Возможно, SO должен добавить некоторые функциональные возможности для исходного кода, где вы можете разделить его по файлам.Возможно, это может улучшить читаемость: https://gist.github.com/4c91435aefde9ad5846f. Но я также вставлю сюда свой код на случай, если истечет моя суть.
_filters.html.haml
%ul#filters
- @filters.each do |filter|
%li
%a{:"data-name" => filter.name, :href => filter_url(@url_filters.add_to_url(filter.name))}
filters.js.coffee
$('#filters li a').live 'click', ->
history.pushState(null, "", @href) # This changes the url (not using hash bangs)
$.getScript(@href) # This will call index.js.coffee
filters_controller.rb
class FiltersController < ApplicationController
def index
@url_filters = URLFilters.parse(request.fullpath)
end
end
index.html.haml
= javascript_include_tag :filters
= render "filters"
index.js.coffee
$('#filters li a').each ->
# This is the part I'm having trouble with. The code below obviously won't work but hopefully it'll give you an idea of what I'm trying to do
# But basically I want to update each url filter url to account for the new url when the url changes
$(this).attr('href', '<%= @url_filters.add_to_url($(this).data("name")) %>')