Поддержание состояния моих древовидных навигационных рельсов - PullRequest
4 голосов
/ 10 марта 2012

У меня есть древовидная навигация, которая мне нужна для различных действий контроллера.Однако, когда я перехожу к другому действию, нажимая на link_to, моя древовидная структура разрушается.

Как мне сохранить состояние?

Вот код, если он необходим: -

.three.columns
  %ul(class = "continent_name")
    - @destinations.group_by(&:continent).each do |continent, ds_per_continent|
      %li=link_to continent, "#"
      %ul(class = "country_name")
        - ds_per_continent.group_by(&:country).each do |country, ds_per_country|
          %li=link_to country, "#"
          %ul(class = "city_name")
            - ds_per_country.each do |destination|
              %li=link_to destination.name, destination_path(destination)

Когда я иду по пути назначения, я хочу, чтобы название страныбыть видимым, а не все рухнуло.Как это можно сделать?

Код контроллера

class DestinationsController < ApplicationController
    before_filter :find_destination, :except => [:index]
    before_filter :all_destinations

    def index   
    end

    def show
        @photos = @destination.destination_photos.all
        cookies['destination_id'] = params[:id]
    end

    def photos_videos
        @photos = @destination.destination_photos.all
    end

    def topic_blog
        @topics = Topic.all
    end

    private

    def find_destination
        @destination = Destination.find(params[:id])
    end

    def all_destinations
        @destinations = Destination.all
        cookies['destination_id'] = params[:id]
    end
end

Код JS

$(document).ready(function(){
    $('.country_name').hide();
    $('.city_name').hide();
    $('li').click(function() {
        $(this).next('ul').toggle();
    });

    $('.city_name').click(function(){
    $('.destination').append();
    });
});

Модель

class Destination < ActiveRecord::Base

    alias_attribute :city, :name
    validates :continent,   :presence   => true
    validates :country,     :presence   => true

end

Jquery

$('.country_name').hide();
    $('.city_name').hide();
    $('li').click(function() {
        $(this).next('ul').toggle();
    });

    $('.city_name').click(function(){
    $('.destination').append();
    });

1 Ответ

0 голосов
/ 12 марта 2012

Используйте метод cookies в вашем контроллере навигации.Узел для расширения должен быть зарегистрирован в файле cookie, например,

cookies['country_id'] = params[:country_id]

А затем на стороне JS можно легко извлечь узел, используя функцию $.cookie, доступную в плагине cookie , например:

$.cookie('country_id');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...