我之前用的是 rails3 没用过 data-remote,现在接手 rails4 项目后,发现 data-remote 调用的 view 全部都是下划线开头的 view 文件(如_index.xxx),但直接打开的话又不需要带下划线 (index.xxx)。导致左键点击和右键新窗口打开需要 2 个 view 文件支持。现在请教各位,如何解决这个问题
你理解有误:
没太懂,建议看看 ujs 的内容,https://github.com/rails/jquery-ujs/wiki
@rei @liwei78 感谢二位回复,可能我理解不到位没说清楚 现在代码类似链接 直接点击发起 ajax 请求,调用的是_index.xxx 的 view(局部模板) 我用/xxx/yyy 地址直接打开(比如右键新窗口)调用的是 index.xxx 我的困惑是,如何能让两者统一,调用同一个 view 文件呢?不能的话,要做两个内容一样的 view?
#3 楼 @aswong83 <a> 没有 link_to 这个属性,可能你自己绑定了逻辑?
<a>
link_to
/xxx/yyy 经过路由,找到对应的 action,然后根据 action 调用模版。因为是 ajax 请求,所以它默认是找 .js.erb 类型的模版,跟 .html.erb 没有必然关系。还是要再看看官方文档
.js.erb
.html.erb
http://guides.ruby-china.org/working_with_javascript_in_rails.html#%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E5%A4%84%E7%90%86 https://github.com/rails/jquery-ujs
#3 楼 @aswong83 rails 的 link_to 方法,正常应该是 <%= link_to "name", url_path, data: { ... } %> ,你说的都是在 data 里面发生的。如果给 link_to 加上 remote:true,它产生的是一个 js 请求,对应的是 action.js.erb 模板。以上描述是正常情况下的。我怀疑是不是某些 lib,或者 gem 改变了这种约定,毕竟是 3.x 过来的,一些 3.x 的 gem 还没有移除。
action.js.erb
至于在 a 里加了一个 link_to 属性,是不好的。要么是旧代码、旧方法没有移除,要么是设计思路不对。
ps:我好想有印象,一个 action 请求直接调用它的 partial 模板,而不是它本身,它本身留给其他方法调用。可能因为 2.x 升级 3.x,现在升级 4.x,细思极恐呀。
#5 楼 @liwei78 唤醒了我远古的记忆,浮现了一点片段,马上又被掩埋……
#6 楼 @rei 哈哈,当时写法从 asp 参考过来,也能写出功能。