この演習は少しトリッキーでした。解決策を投稿して、誰かが別の方法で行ったかどうか、またはより良い方法を知っている人がいるかどうかを確認したいと考えました。
Asset Pipline を使用するためのベスト プラクティスについてはよくわかりません。たとえば、application.js マニフェスト ファイルに配置する正しい順序や、lib と app に配置するタイミングなどです。libに次を入れて、動作させてみました。
Michael Hartl の Rails Tutorial 2nd ed Chapter 10、Exercise 7 から:
(難しい) JavaScript 表示をホームページに追加して、140 文字からカウントダウンします。
最初に、jQuery の Twitter のようなカウントダウンに関するこの記事を読みました。
次に、 app/views/shared/_micropost_form.html.erb を次のように更新しました。
<%= form_for(@micropost) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.text_area :content, placeholder: "Compose new micropost..." %>
</div>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<span class="countdown"></span>
<% end %>
次に、libにjavascriptsディレクトリを作成し、ファイルを追加しました
lib/assets/javascripts/microposts.js
function updateCountdown() {
// 140 is the max message length
var remaining = 140 - jQuery('#micropost_content').val().length;
jQuery('.countdown').text(remaining + ' characters remaining');
}
jQuery(document).ready(function($) {
updateCountdown();
$('#micropost_content').change(updateCountdown);
$('#micropost_content').keyup(updateCountdown);
});
最後に、CSSを少し追加しました
アプリ/アセット/スタイルシート/custom.css.scss
/* micropost jQuery countdown */
.countdown {
display: inline;
padding-left: 30px;
color: $grayLight;
}
最後に、 app/assets/javascripts/application.js にディレクティブを追加します
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require microposts
//= require_tree .
最終結果は次のようになります http://grab.by/dbC6
質問:
マニフェスト行を後に置くのは間違っていますか?//= require_tree .
たとえば、これは機能しますが、 tree の上に行を追加する場合との違いが何であるかはわかりません。
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
//= require microposts