这个练习有点棘手。想我会发布我的解决方案,看看是否有人做得不同,或者是否有人知道更好的方法。
我不确定使用 Asset Pipline 的最佳实践。例如,将内容放入 application.js 清单文件的正确顺序,或者何时将内容放入 lib 与 app。我只是将以下内容放入 lib 以尝试使其正常工作。
来自Michael Hartl 的 Rails 教程第 2 版 第 10 章,练习 7:
(具有挑战性)将 JavaScript 显示添加到主页以从 140 个字符开始倒计时。
首先,我阅读了这篇关于 jQuery Twitter-like countdowns 的文章,其中提供了执行此操作的代码。
接下来,我将 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