新手问题 请教一个关于 data-remote 调用的 view 的问题

aswong83 · 2015年08月14日 · 最后由 liwei78 回复于 2015年08月14日 · 2071 次阅读

我之前用的是 rails3 没用过 data-remote,现在接手 rails4 项目后,发现 data-remote 调用的 view 全部都是下划线开头的 view 文件(如_index.xxx),但直接打开的话又不需要带下划线 (index.xxx)。导致左键点击和右键新窗口打开需要 2 个 view 文件支持。现在请教各位,如何解决这个问题

你理解有误:

  1. 下划线开头的模版是局部模版,可以用于抽取共用的页面模版或者 ajax 返回替换。
  2. data-remote 会发起 rails_ujs 形式的 ajax 请求,但返回什么取决于服务端逻辑,跟局部模版没有必然关联。
  3. rails_ujs 目前不支持区分鼠标左键和右键,需要自己实现客户端代码。

没太懂,建议看看 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 这个属性,可能你自己绑定了逻辑?

/xxx/yyy 经过路由,找到对应的 action,然后根据 action 调用模版。因为是 ajax 请求,所以它默认是找 .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 还没有移除。

至于在 a 里加了一个 link_to 属性,是不好的。要么是旧代码、旧方法没有移除,要么是设计思路不对。

ps:我好想有印象,一个 action 请求直接调用它的 partial 模板,而不是它本身,它本身留给其他方法调用。可能因为 2.x 升级 3.x,现在升级 4.x,细思极恐呀。

#5 楼 @liwei78 唤醒了我远古的记忆,浮现了一点片段,马上又被掩埋……

#6 楼 @rei 哈哈,当时写法从 asp 参考过来,也能写出功能。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号