4 Stimmen

Die Beibehaltung des Zustands meiner baumbasierten Navigationsschienen

Ich habe eine baumbasierte Navigation, die ich über verschiedene Aktionen eines Controllers haben möchte. Wenn ich jedoch zu einer anderen Aktion wechsle, indem ich auf den link_to klicke, bricht meine baumbasierte Struktur zusammen.

Wie kann ich den Zustand beibehalten?

Hier ist der Code, wenn er benötigt wird:-

.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)

Wenn ich zum Ziel-Pfad gehe, möchte ich, dass der Ländername sichtbar ist, anstatt dass alles zusammenbricht. Wie kann das gemacht werden?

Controller-Code

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-Code

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

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

Modell

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();
    });

0voto

Aleksander Pohl Punkte 1641

Verwenden Sie die cookies Methode in Ihrem Navigationscontroller. Der Knoten, der erweitert werden soll, sollte im Cookie registriert sein, z.B.

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

Dann auf der JS-Seite könnten Sie den Knoten leicht extrahieren, indem Sie eine $.cookie Funktion verwenden, die im Cookie-Plugin verfügbar ist, z.B.:

$.cookie('country_id');

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X