Rails 3 - загрузка Subnav с помощью Ajax .... Какой контроллер владеет subnav? - PullRequest
1 голос
/ 26 сентября 2010

Как только мое приложение Rails 3 загружено, пользователь может щелкнуть элемент, который затем должен загрузить динамический субнап.

Мое мышление (поскольку оно должно быть динамическим) - это onClick, чтобы сделать JQuery AJAX-вызов к серверу, а затем вставить HTML-ответ в DIV на странице ...

Я бы хотел, чтобы вы посоветовали, как / где должна располагаться логика subnav в приложении rails, поскольку у меня нет контроллера навигации или представления ... Но, может быть, я должен иметь его?

Создать ли навигационный контроллер? Или использовать контроллер приложения? У меня также есть контроллер страниц, который я использую для целевой страницы, контактов, контактов и т. Д. *

Спасибо!

1 Ответ

1 голос
/ 26 сентября 2010

Для меня я бы использовал контроллер навигации, а не контроллер приложений, так как контроллер приложения легко становится чрезвычайно сложным.

Это должно создать папку представления в app/views/navigation.Я также поместил бы здесь все свои шаблоны навигации (включая вашу главную навигацию).

Так что могут быть эти файлы:

app/views/navigation/
  _main_nav.html.erb # made it a partial file for including in other pages
  subnav.html.erb # or subnav.js.erb if you don ajax call and return scripts

и в ваших файлах макета, где вам нужна основная навигацияВы просто делаете это.

Так что даже завтра вам вдруг понадобятся два или три различных навигационных меню, и при вызовах ajax у вас есть централизованное место для их обработки, вместо того, чтобы помещать их все в контроллер приложения.

ДругоеЕще одно предложение - создать навигационный контроллер под некоторыми областями действия.Как и app/controllers/page_structures/navigation_controller.rb, ваши представления будут в app/views/page_structures/navigation/

Таким образом, вы можете поместить все связанные со структурой страницы вещи, такие как боковые панели, пользовательские заголовки, баннеры и т. Д., В одну и ту же область видимости страницы.

===== ОБНОВЛЕНИЕ =====

Поскольку ваши AJAX-вызовы кажутся относительно статичными, я бы посоветовал вашим путям использовать какое-то прямое соответствие.

Если мое предположениеправильно, у вашей верхней навигации есть несколько пунктов, и у каждого элемента есть свое подменю.Таким образом, вы хотите загрузить подменю по одному, но не все.(Если на самом деле это все, то вы можете просто включить их все в рендеринг ...)

/page_structures/:top_nav/:sub_nav_template_name # So in here I assumed you will have many navigations and sub-nav to load.

, тогда мы сопоставим этот путь со следующим действием:

def get_sub_nav
  # checks both params[:top_nav] and params[:sub_nav_template_name] exist and not pointing to some other dangerous place. (I don't know if this work if the input is './' or '../' these kind of things
  render "page_structures/navigation/#{params[:top_nav]}/#{params[:sub_nav_template_name]}"
end

Таким простымдействие, когда бы вы ни добавляли больше элементов навигации / навигации, вам просто нужно создать соответствующий шаблон ответа AJAX.таким образом, вы делаете минимальные вещи!

Конечно, если кому-то, как у вас есть какие-то элементы, нужно будет возвращать некоторые другие данные в качестве ответа, такие как отвечающие подкатегории, вам может потребоваться создатьдругие маршруты, чтобы вы могли передать свой родительский идентификатор категории.

Вы можете подумать так: мое предложение относится к относительно статической централизованной суб-навигации по умолчанию. Но если вам нужны специализированные суб-навигации, для обработки которых требуются другие данные, для каждой из них вам нужно создатьмаршрут и действие в контроллере навигации для принятия идентификатора вашей категории, идентификатора продукта и т. д. Но, тем не менее, этот файл шаблона может следовать тем же способом подачи.

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