我在rails应用程序中实现有序列表时遇到了一些麻烦。我一直在使用cocoon gem来获得一些嵌套的表单和一切正常工作的功能,但是,我似乎无法呈现一个有序列表来使嵌套表单更具可读性。
启动我的代码看起来像这样 _form.html.erb
....
<div class="clearfix">
<div class="col-lg-3 col-md-6">
<ol>
<%= f.label :Movement %>
<%= f.fields_for :movements do |movement| %>
<li><%= render 'movement_fields', f: movement %></li>
<% end %>
<div class="links">
<%= link_to_add_association 'Add movement', f, :movements, class: "pull-right d-inline-block btn btn-primary add-button" %>
</ol>
</br>
</br>
</div>
</div>
.....
_movement_fields.html.erb
<div class="nested-fields">
<li><%= f.text_field :name %></li>
<%= link_to_remove_association "Remove", f, class: "pull-left d-inline-block form-button btn btn-warning" %>
</div>
exercise.js
$(document).ready(function() {
$('#exercise_workout_date').datepicker({ dateFormat: 'yy-mm-dd' });
new Morris.Line({
// ID of the element in which to draw the chart.!
element: 'chart',
// Chart data records -- each entry in this array corresponds to a point on!
// the chart.!
data: $('#chart').data('workouts'),
// The name of the data record attribute that contains x-values. xkey: 'workout_date',!
// A list of names of data record attributes that contain y-values. ykeys: ['duration_in_min'],!
// Labels for the ykeys -- will be displayed when you hover over the // chart.!
xkey: 'workout_date',
ykeys: ['duration_in_min'],
labels: ['Duration (min)'],
xLabels: "day",
xLabelAngle: 60,
xLabelFormat: function (x) {
date_string = x.getFullYear() + "/" + parseInt(x.getMonth() + 1) + "/" + x.getDate();
return date_string;
},
yLabelFormat: function(y) { return y + ' min'; }
});
});
$('#list').html('<li>foo</li>');
的application.js
//= require jquery
//= require jquery-ui/datepicker
//= require jquery_ujs
//= require jquery.raty.min
//= require chosen-jquery
//= require bootstrap-sprockets
//= require raphael.min
//= require morris
//= require social-share-button
//= require html.sortable
//= require cocoon
// require turbolinks
//= require_tree .
application.html
<!DOCTYPE html>
<html>
<head lang=”en”>
<title>FitnessLabs (A & K LABS)</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
<%= favicon_link_tag 'logo.ico' %>
<link href="https://fonts.googleapis.com/css?family=Doppio+One|Pacifico" rel="stylesheet">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<meta name=viewport content="width=device-width, initial-scale=1">
</head>
<body>
<%= render "layouts/navigation2"%>
<div class="container-fluid">
<%= render 'layouts/messages'%>
<%= yield %>
</div>
<%= render "layouts/footer" %>
</body>
<script src="//load.sumome.com/" data-sumo-site-id="c5bf8251f90d125ef3264df7e976b4ab5a4a5a380ab1deaec05444284b2169d0" async="async"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
</html>
目前,此代码为第一个列表项呈现1.但是,当我点击“添加动作”时它不会为表格的每个连续部分呈现2. 3. 4.等。我试过移动&lt;醇&GT;和&lt; li&gt;周围,但这是我最接近的。
我希望为每个新呈现的嵌套表单部分显示1,2,3等用户,这样就可以更清楚地与哪个一致。我该怎么做呢?我在正确的道路上吗?
谢谢,
答案 0 :(得分:0)
<强>原始强>
所以问题是当你的jquery触发添加字段时,5之前的html不呈现。
这里的解决方案是开放式的,您可以使用任意数量的技术来解决问题,因为它与cocoon或rails无关。
我的建议是因为你已经有了cocoon,只需将下面两个选项中的一个放入自定义cocoon回调文件(app/assets/javascript/
)中,就可以使用插入后回调来... ...
选项A
您使用jquery强制仅重新呈现<OL>
列表,允许HTML5为您完成剩余的工作。这篇文章中显示了...... how to "refresh" UL after adding new LI with jQuery?
选项B
触发字段计数&amp;将该数字注入Stackoverflow上显示的<LI>
项目:Using jQuery to dynamically refresh an ordered list
<强>更新强>:
我对recipes_controller.rb
,模型&amp;观点。我不得不关闭kicksearch - 因为让控制器完全运行不值得解决问题。非全面的东西清单......
user_recipes.rb
),以便更好地查找配方&amp;用户。@recipe.user
&amp;有助于Rails方式(允许您在未来灵活设计&amp; pundit / cancancan /您最终用来限制对记录和页面的访问)。.id
末尾没有current_user
,我们在转到{{1}后修复了@user
方法is_owner
(recipes_helper.rb
)做了一个帮助,因为有5个地方在测试它。我也删除了管理员?测试它在哪里和它的问题只是让控制器执行。我不得不在控制器的顶部include RecipeHelper
使其在那里工作。user_id
的验证,看起来你将forgein_key重命名为chef_id了...我不会这样做,因为它意味着我为{{1}做的助手}仅适用于recipe_controller而不是整个应用程序,&amp;使它更像是一个DSL,而不是很容易看到这个东西。is_owner
)&amp;传递views/recipes/_gravatar_section.html.erb
作为本地var PS:我现在正处于配方运行足以测试jquery的地步......将更新更多,或者您可以通过分叉回购github观看更新,
Javascript资产......
@user
&amp;我认为我会提到的rails assets:clean
只是因为我还没有。rails assets:precompile
绝对必须位于底部,否则您将遇到包括所有文件在内的问题。//= require_tree .
位于其前面。//=
&amp;这有时会干扰app/assets/javascript/exercise.coffee
内容的加载。答案 1 :(得分:0)
发现日期选择器变坏是一个jquery冲突,通过强力手测试,直到我得到一个工作版本。
罪魁祸首是其中一个......
//= require jquery-ui/datepicker
//= require jquery_ujs
//= require jquery.raty.min
//= require chosen-jquery
//= require bootstrap-sprockets
//= require raphael.min
//= require morris
//= require social-share-button
//= require html.sortable
我建议按照最值得信赖的顺序逐个添加它们......直到它再次打破javascript。如果在拉出上面的所有项目之后试一试,那么您订购号码的刷新应该有效。 datepicker也是(一定要删除你在视图中添加的日期选择器脚本) - 请阅读下面的内容,了解更多关于如何解决这些问题的问题。解决它们......
Rails - 资产管道Link - Javascript解决问题......
elements
是否有js文件名
......看到茧被装在“元素”部分app/assets/javascript/exercise.coffee
//= require_tree .
...绝对必须在底部,否则你将遇到包括所有文件在内的问题。//=
。它需要加载它们grep -r 'script' /app
&amp;检查出现的任何地方
...我在您的视图文件中找到脚本而不是javascript的资源文件...
如果资产资产正在加载,我们知道它是冲突或编写不良的代码app/assets/javascript/application.js
,文件底部的//= .
&amp;保存 ...
...现在,你应该一次将你的js文件重新添加到app/assets/javascript
,每次通过刷新来测试...
...网页,可能在复制文件后重启服务器&amp;做rake或rails资产,如下所示
...... rails assets:clean
&amp; rails assets:precompile