Rails 3.2.2 с вкладками Twitter Bootstrap Ajax не работает - PullRequest
2 голосов
/ 20 марта 2012

У меня второе приложение с Rails, и я хочу, чтобы Ajax работал.Я также использую вкладки из начальной загрузки 2. Я обнаружил две версии вкладок для начальной загрузки, одна из которых предоставляет вам вкладки, и вы можете поместить содержимое этих вкладок в DIV, а другая - в основном каждая вкладка, на которую вы способны.использовать ссылку.Я выбрал последнее, чтобы я мог Ajaxify ссылки.Основная идея заключается в том, что домашняя страница моих приложений имеет вкладки в верхней части, такие как: Главная, Инвентарь, Задачи и т. Д., И когда вы нажимаете на вкладку, вы попадаете на страницу индекса каждого из этих контроллеров.У меня это работает прекрасно, пока я не попытаюсь использовать ajax для загрузки действия индекса для каждого контроллера / вкладки.Поэтому я буду использовать только вкладку / контроллер Home в качестве примера:

Home Controller

class HomeController < ApplicationController

  def index
    @data = "Home Screen Index Page"
    respond_to do |format|
      format.html
      format.js
    end
  end
end

Вот ссылка на мой взгляд (app / views / layouts / application.html.erb):

link_to "Home", home_path(:format => :js), :remote => true

Я также только что попробовал:

link_to "Home", home_path, :remote => true

На данный момент мое действие с индексом простое (/app/views/home/index.html.erb):

<%= @data %>

Я создал файл home.js.erb, который был в основном просто предупреждением, потому что он никогда не выполнялся (я переименовал и даже удалил файл без изменений в консольных сообщениях), и как только предупреждение фактически сработалодля меня я могу сосредоточиться на коде jquery: у меня было следующее:

$("<%= escape_javascript render(:file => 'home/index.html.erb') %>").insertAfter('.showindex');

При просмотре консоли, когда я нажимаю на ссылку с вкладкой, я вижу следующее:

Started GET "/home.js" for 127.0.0.1 at 2012-03-19 18:15:21 -0700
Processing by HomeController#index as JS
  Rendered home/index.html.haml within layouts/application (0.1ms)
Completed 200 OK in 8ms (Views: 7.4ms | ActiveRecord: 0.0ms)

если я удалю (: format =>: js) из ссылки, консольное сообщение в основном слегка изменится на следующее:

Started GET "/home" for 127.0.0.1 at 2012-03-19 18:16:59 -0700
Processing by HomeController#index as JS
  Rendered home/index.html.haml within layouts/application (0.1ms)
Completed 200 OK in 7ms (Views: 7.2ms | ActiveRecord: 0.0ms)

Глядя на консольное сообщение, в моей голове это должно работатьно это не так.Ничего не отображается, и фактически функция TAB для вкладки Home в начальной загрузке больше не работает.

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 июня 2013

Bootstrap не будет отображать содержимое выбранной вкладки, если вы не установите data-target.

=link_to "Home", home_path(:format => :js), :remote => true, 'data-toggle' => 'tab', 'data-target' => '#indexcontent'


<div class="tab-content">
    <div class="tab-pane" id="indexcontent">
    </div>
</div>
2 голосов
/ 20 марта 2012

Хорошо, я понял это.Правильный код ссылки:

=link_to "Home", home_path(:format => :js), :remote => true, 'data-toggle' => 'tab'

И мне нужно было назвать файл js после действия в контроллере, а не в самом контроллере.Поэтому вместо того, чтобы называть его home.js, мне нужно было называть его index.js, и он работает.

Одна вещь, которую я заметил, также была, если бы я назвал его index.js.erb, фактически отображал бы код jquery, а невыполнить его.Это будет выполнять предупреждение, хотя.Во всяком случае, назвав файл просто index.js, добился цели.Вот итоговый результат для файла index.js:

$('.indexcontent').empty()
$('.indexcontent').append("<%= escape_javascript render(:file => 'home/index', :formats => [:html]) %>");
...