Rails Asset Pipeline

0

У меня есть 2 вопроса.

  • В моем приложении Rails, с которым я занимаюсь, у меня есть дерево файлов, как показано ниже:

Изображение 174551

Изучая уроки Майкла Хартла, я научился добавлять файл custom.css.scss, чтобы позаботиться о CSS. Мой вопрос: ПОЧЕМУ, чтобы материал CSS не попал в "kalendar.css.scss", который выбирает это имя из моего контроллера "Kalendar" или почему CSS не входит в "application.css"?

  • С javascript мне нужно будет создать файл custom.js.coffee? Если нет, как бы я хотел добавить текстовый эффект для текста, который будет отображаться в представлении. Как я могу добавить дополнительный плагин javascript, который я загружаю?

Но я знаю, что я могу сделать что-то вроде:

<%= javascript_tag "alert('hey you!')" %>

РЕДАКТИРОВАТЬ:

Теперь в моем "vendor/assets/javascripts/textEffect.js" у меня есть этот код, который является плагином, который я загружаю онлайн.

(function($) {

    function shuffle(a) {
        var i = a.length, j;
        while (i) {
            var j = Math.floor((i--) * Math.random());
            var t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }

    function randomAlphaNum() {
        var rnd = Math.floor(Math.random() * 62);
        if (rnd >= 52) return String.fromCharCode(rnd - 4);
        else if (rnd >= 26) return String.fromCharCode(rnd + 71);
        else return String.fromCharCode(rnd + 65);
    }

    $.fn.rot13 = function() {
        this.each(function() {
            $(this).text($(this).text().replace(/[a-z0-9]/ig, function(chr) {
                var cc = chr.charCodeAt(0);
                if (cc >= 65 && cc <= 90) cc = 65 + ((cc - 52) % 26);
                else if (cc >= 97 && cc <= 122) cc = 97 + ((cc - 84) % 26);
                else if (cc >= 48 && cc <= 57) cc = 48 + ((cc - 43) % 10);
                return String.fromCharCode(cc);
            }));
        });
        return this;
    };

    $.fn.scrambledWriter = function() {
        this.each(function() {
            var $ele = $(this), str = $ele.text(), progress = 0, replace = /[^\s]/g,
                random = randomAlphaNum, inc = 3;
            $ele.text('');
            var timer = setInterval(function() {
                $ele.text(str.substring(0, progress) + str.substring(progress, str.length).replace(replace, random));
                progress += inc
                if (progress >= str.length + inc) clearInterval(timer);
            }, 100);
        });
        return this;
    };

    $.fn.typewriter = function() {
        this.each(function() {
            var $ele = $(this), str = $ele.text(), progress = 0;
            $ele.text('');
            var timer = setInterval(function() {
                $ele.text(str.substring(0, progress++) + (progress & 1 ? '_' : ''));
                if (progress >= str.length) clearInterval(timer);
            }, 100);
        });
        return this;
    };

    $.fn.unscramble = function() {
        this.each(function() {
            var $ele = $(this), str = $ele.text(), replace = /[^\s]/,
                state = [], choose = [], reveal = 25, random = randomAlphaNum;

            for (var i = 0; i < str.length; i++) {
                if (str[i].match(replace)) {
                    state.push(random());
                    choose.push(i);
                } else {
                    state.push(str[i]);
                }
            }

            shuffle(choose);
            $ele.text(state.join(''));

            var timer = setInterval(function() {
                var i, r = reveal;
                while (r-- && choose.length) {
                    i = choose.pop();
                    state[i] = str[i];
                }
                for (i = 0; i < choose.length; i++) state[choose[i]] = random();
                $ele.text(state.join(''));
                if (choose.length == 0) clearInterval(timer);
            }, 100);
        });
        return this;
    };

})(jQuery);

И в моем "представлении" у меня есть файл с контентом:

<p class="my-container">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

в моем "application.js" у меня есть:

//= require textEffect

и в "app/assets/javascripts/custom.js.coffee" У меня есть

$(document).ready() -> 
$("#my-container").unscramble();

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

1 ответ

1
Лучший ответ

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

Например, я хотел поставить макет связанные элементы в layout.css.scss, и я поставил Kalendar, связанные CSS в kalendar.css.scss. Единственная причина, по которой я не буду использовать application.css для ваших пользовательских стилей, заключается в том, что application.css является файлом манифеста.

Файл манифеста - это файл, который сообщает рельсам, какие активы включать с использованием синтаксиса запятой. Например, в манифесте css

/* Manifest File
 *= require_tree .
*/

Это говорит о том, что рельсы включают весь каталог таблиц стилей. Вы можете вручную включать файлы с

*= require layout
*= require my_file_name

Точка этой системы состоит в том, чтобы отобразить все активы в один файл, это ускоряет загрузку страницы, и в процессе производства вам нужен только один файл css/js. Чтобы включить файл манифеста, вы просто пишете

= stylesheet_link_tag 'manifest_file_name'

Имена файлов предназначены исключительно для организации.

  • 0
    Я понял теперь. Поэтому, если я скачал сторонний плагин js, я бы поместил его в «vendor / javascripts /loadedPlugin.js» и затем перешел в «app / assets / javascripts / application.js», чтобы //=require downloadedPlugin плагина. Я прав?
  • 0
    Да, но по умолчанию для rails требуется весь каталог, поэтому он должен быть автоматически включен, если вы не выбрали пользовательские настройки.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню