我有一个视图有一些动态分层选择(也就是说,第一个影响第二个可用选项)。刷新保持第一次选择的选项,但会从第二次选择中删除选项。我通过初始化第二个选择的onload来处理这个问题。目前我在[controller name] .js.coffee中有window.onload,但是onload会在我项目中的每个页面上运行。显然,这两个选择不在每一页上。我如何将它添加到需要它的页面?Rails:在哪里放置一个特定的视图
2
A
回答
2
对于这一点,我设立了控制器的名称和动作名称类的体ID在布局(application.html。*)
<body id="<%= controller_name %> class="<%= action_name %>">
<%= yield %>
</body>
然后在您的controller.js文件,检查所需控制器和/或动作;
$(document).ready(function() {
if ($("#controller").length) {
// Your specific controller code here
}
})
为PJAX用户注意:身体ID永远不会更新,你必须攻入pjax中间件 https://github.com/foohey/rack-pjax/commit/38caff53eec6a366aad3a2600d255529ebedfcc5#diff-2ae22cdf8106300731c4c37a3363ea48
0
我建立在badfoo的使用类,来保持命名空间的建议顶部的解决方案清洁。
我在根布局(application.html。*)中为body标签添加了“controller”和“action”属性。
然后,在application.js.coffee中,我做了一个onload函数来获取这些属性,检查一个类是否与控制器同名。 (因此,如果控制器是“客户端”,它将在js中寻找“客户端”类)。如果控制器类具有onload方法,则首先调用它。查找动作特定的onload的收益如下:它检查与动作名称相同的客户端子类。如果它存在并且有一个名为“onload”的方法,它会调用这个方法。如果操作的子类不存在,它会检查控制器类中名为“#{action} _onload”的方法并调用它。
window.onload =() ->
capitalize = (str) ->
str.charAt(0).toUpperCase() + str.slice(1)
controller = capitalize(document.body.getAttribute('controller'))
action = capitalize(document.body.getAttribute('action'))
controller_class = eval "#{controller}"
if controller_class?
action_class = eval "#{controller}.prototype.#{action}"
action_onload_func = eval "#{controller}.#{action}_onload"
controller_onload_func = eval "#{controller}.onload"
if action_class? and action_class.onload?
onload_func = action_class.onload
else if action_onload_func?
onload_func = action_onload_func
if controller_onload_func?
controller_onload_func()
if onload_func?
onload_func()
需要注意的是这些类必须由用@符号为前缀来全球非常重要的。
相关问题
- 1. 在列表视图里放置一个自定义视图
- 2. Rails:在哪里放置配置变量
- 3. WPF MVVM,我应该在哪里放置视图特定的属性?
- 4. 使用MVC3/Razor我会在哪里放置特定于一个视图的图像?
- 5. Rails 4:在哪里放置Struct?
- 6. Rails - 在哪里放置数据文件?
- 7. Rails - 在哪里放置路径助手?
- 8. 在哪里放置一个shell脚本?
- 9. 在哪里放置一个默认值从Model in Rails返回?
- 10. Rails - 在哪里放置一个css文件?
- 11. 在哪里释放一个块的视图控制器
- 12. 哪里可以在Rails 4.1中放置页面特定的jQuery代码?
- 13. 在哪里放置视频流android
- 14. 动态视图?在哪里放逻辑?
- 15. 在哪里放置资源特定的逻辑
- 16. 页面特定的CSS样式,但在哪里放置代码?
- 17. 我在哪里可以放置一个HTML文件来浏览网页视图
- 18. 最佳实践:在哪里放置一个函数,从视图中调用
- 19. 我应该在哪里放置视图相关的常量 - backbone.js
- 20. 我应该在哪里放置我的部分视图
- 21. Rails:在哪里放置自定义类注入?
- 22. 放在哪里绘制的图像为特定屏幕大小
- 23. Java Swing ImageIcon,在哪里放置图像?
- 24. Vaadin,在哪里放置图像?
- 25. 我在哪里放置意图代码?
- 26. MVC:我在哪里放置定制UICollectionCell
- 27. 放置_changed的正确位置在哪里? Rails中的方法?
- 28. JavaScript - 我应该在哪里放置“var”以获取特定值
- 29. C#在哪里放置查看特定信息?
- 30. 在哪里放置与视图数据无关的额外视图数据
有没有什么方法可以将这部分用于部分?这是一个很好的解决方案,但我在application.html。*中有body标签来消除冗余,因此我不能添加id或class。 – Tyler
您应该在您的布局中设置body ID(application.html。*) – m4tm4t
我从未想过可能存在从视图访问控制器和操作名称的通用方法。谢谢。对于任何其他人这样做:[如何获取控制器/操作名称](http://stackoverflow.com/questions/3757491/can-i-get-the-name-of-the-current-controller-in-the-视图) – Tyler