问题标签 [ujs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
511 浏览

ruby-on-rails - 当您拥有可重用的小部件时,在 Rails 中执行 UJS 的最佳方法是什么?

在我当前的项目中,我有几个实例,其中我有一个可重用的表单,它存在于 rails 部分中。此表单通过 ajax (:remote => true) 提交给特定的控制器。控制器做了一些事情,然后返回适当的 js.erb 以通过 javascript 修改页面。

当我只有一个视图时,这很好用。但是当这个可重用的部分存在于多个视图上时,问题似乎就会发生。在视图 1 中,我可能想在视图 2 中发出一组完全不同的 javascript 命令。

作为一个具体的例子,假设我有一个具有正常 CRUD 操作的注释控制器。

我现在有部分称为 _comments_box.erb。这个 _comments_box.erb 包含通过简单的一行提交评论的能力:

这提交给一个 comments_controller.rb 创建方法,看起来像这样:

create.js.erb 反过来向视图添加注释,可能对 DOM 进行大量其他更新。

假设我在名为 post_summary.erb 的视图中渲染 _comments_box.erb。现在我有了另一个视图 post_detail.erb,它需要相同的 _comments_box.erb。但是 post_detail.erb 要求我更新 DOM 上完全不同的 div 以响应新评论。

我需要为每个实例创建不同的 JS 响应。所以我可以:

  • 创建一个备用控制器方法,比如 create_2。将一些参数从 post_detail.erb 传递给 _comments_box.erb 到 _comments_box.erb 部分,以便它知道要触发哪个控制器方法。这将允许我拥有一个单独的文件 _create_2.js.erb,这将允许我独立操作 post_detail.erb 视图。
  • 完全忘记使用 js.erb,只使用普通的旧 AJAX 并返回 JSON,并在客户端完全处理 javascript 操作。

似乎选项 1 允许我继续使用 Rails 支持的 UJS,这很好。但也意味着我可能会到处添加很多重复的代码,这很烦人。有没有办法让我在继续使用 UJS 的同时优雅地做到这一点?

0 投票
2 回答
567 浏览

ajax - Rails 3,在 html 区域标签上使用 UJS

当用户单击图像区域时,我想触发并向服务器发出 ajax 请求。有没有一种简单的方法来实现这个 a-la Rails 3 UJS?类似于 link_to ..., :remote=>true 的东西?

我尝试了以下代码:

但添加的数据远程属性不起作用。

谢谢你的帮助。

0 投票
2 回答
920 浏览

jquery - jquery-rails 打破了kaminari?

我更新了我的 Rails 3.0.7 应用程序以使用 kaminari 0.12.4(从 0.10.4 开始)进行分页和 jquery-rails 1.0.9,它似乎打破了分页。我已经重新生成了 kaminari 视图,因为它们是不同的,但由于某种原因,ajax 无法正常工作。

已经包括了。这会在浏览器中产生:

在我看来,我有: <%= paginate @users, :remote => true %>

这会产生以下错误:

ActionView::MissingTemplate(缺少模板用户/显示 {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:js, "application/ecmascript", "application/ x-ecmascript", " / "], :locale=>[:en, :en]} 在视图路径 "/home/epipheus/CodeWarehouse/praypeer/app/views", "/home/epipheus/.rvm/gems /ruby-1.9.2-p0@rails3tutorial/gems/kaminari-0.12.4/app/views"):

以下非 ajax 版本当然可以正常工作:

所以看来我的jquery ujs有问题吗?请帮我。

0 投票
1 回答
2628 浏览

ruby-on-rails - Rails 帮助预填充数据 - 令牌输入字段

我正在尝试将数据预填充到令牌输入字段中。

但是在我的编辑视图中没有预先填充任何内容。

我已经关注了这个 railscast:http: //railscasts.com/episodes/258-token-fields

我的控制器:

我的应用程序.js:

我的编辑视图:

令牌字段输出:

0 投票
1 回答
518 浏览

ruby-on-rails - Rails 3 UJS Ajax 模式/策略,哪个更好?

我工作的公司最近从 Rails 2 升级到 Rails 3,同时我们也从 rjs 迁移到 jquery。我们正在采用一种旨在提高视图可重用性的新模式。我将以编辑/更新为例来说明项目中做AJAX的新方式和旧方式:

A.旧方式- 编辑操作模板不会向客户端呈现任何特定于更新的 JavaScript 逻辑。更新模板呈现 html 内容和操作(替换元素)。这与 RJS 方法非常相似,但在 jQuery 中。

优点:
1. AJAX html 内容和执行 DOM 操作的 javascript 代码组织在同一个 .rb 文件中,易于维护。
2. 查看规范可以测试是否在更新 AJAX 响应中呈现了正确的 DOM 操作 js 代码。

缺点:
1. 因为html内容和js代码是耦合的,并且在目标页面上假定了一定的DOM结构,在不同的页面上复用比较困难。

B.新方式- AJAX 请求的更新操作模板只返回一个 JSON 文档,其中包含转义的 html 内容。操作 DOM 的 js 代码从编辑操作模板呈现并监听 AJAX:success/error 虚拟事件。所以内容和行为是分开的。

优点:

  1. AJAX html 内容和 javascript(behavior) 是解耦的,因此可以在不同的页面上对内容进行稍微不同的调整和操作。

缺点:

  1. html 内容和 js 代码现在组织在 2 个不同的文件中(编辑动作模板中的 js,更新动作模板中的 html 内容),比以前更难维护。

  2. 我们不能再轻易地测试视图行为——更新模板现在只呈现 AJAX html 内容,但操作它的代码在不同的视图中(编辑)。

  3. 由于响应是 JSON 格式,我们不能再使用格式来判断客户端是期望用 JSON 包装的 html 还是只是 JSON API 调用。

    这些是我到目前为止所学到的东西,我想知道是否有人在这个主题上有更多经验可以对此有所了解 - 通常哪种方法更好以及如何改进它们。

谢谢!

-小天

0 投票
0 回答
384 浏览

ajax - Rails 3 中类似 UJS 的 AJAX 响应

Rails 3 使用 UJS 方法,它允许处理来自 JavaScript 代码的 AJAX 响应。

Rails 3 中的视图应该如何填充“数据”对象,所以我可以检查是否来自 JavaScript?

使用“js.erb”或“js.haml”进行常规渲染会导致 JavaScript 中的“数据”局部变量“未定义”。

当然,在视图中,我可以使用一些全局变量,如以下(“js.haml”):

…并从 JavaScript 处理程序中调用它,如下所示:

…但它打破了封装。

理想的方法是使用“数据”局部变量。

那么,视图应该是什么样子?

0 投票
1 回答
5464 浏览

jquery - Rails jQuery UJS回调未触发

我正在尝试触发远程链接的 ajax:success 回调。我在 Rails 3.0.8 和 jquery-rails 1.0.11 上。我运行了 jquery 生成器来安装 javascripts。jquery 和 jquery_ujs 都包含在我的默认值中,我可以验证它们是否包含在页面中。

这是我的javascript:

链接:

激活动作:

ajax 调用似乎工作正常。该操作被触发,我可以看到数据库中的更改。但是,没有触发 ajax 回调。我不能让他们中的任何一个工作。我可以让其他事件(例如点击)完美地工作。

如果我在 Firebug 中调试 rails_ujs,我会看到以下代码从 Rails ajax 块运行:

我难住了。有任何想法吗?

0 投票
2 回答
9552 浏览

jquery - 带有 rails 3、jquery 和 ajax 的简单喜欢/不喜欢按钮

我有一个产品、用户和类似的模型。用户可以喜欢产品。我正在尝试实现一个简单的点赞按钮,点击后,用户可以点赞产品。然后,like 按钮转换为like 按钮,允许用户对产品进行不同的操作。很简单。

我已经实现了上述的模型/控制器逻辑。我对 javascript/ajax 不是很好,想知道实现上述功能的最佳方法是什么。我希望通过 ajax 处理喜欢/不喜欢的动作。我正在为我的应用程序使用 rails 3 和 jquery ujs。

谢谢。

0 投票
0 回答
529 浏览

ruby-on-rails - 无法从 form_tag 发送 ajax 请求

我正在尝试从表单标签发送 ajax 请求,但没有发送 XHR 请求。如果我从链接中执行相同操作,则一切正常。

这是我可以从链接或表单发送请求的视图:

然后在我的控制器中检查它是否是 XHR 请求,然后呈现响应 ajax 请求的 javascript:

我的 test.js.erb 很简单:

结果是,如果我单击链接,我会得到我正在寻找的行为,即 response_test div 显示为“hi”。如果我提交表单,我只需将 test.js.erb 中的 javascript 写为字符串,服务器日志告诉我表单没有提交 XHR 请求。如果我在 firebug 中调试整个事情,我会得到相同的结果,链接发送一个 ajax 请求,提交的表单没有。在这两种情况下,我的控制台都告诉我服务器正在将请求作为 JS 处理,所以它不应该是任何数据类型问题。

使用 jquery UJS 运行 Rails 3.0.4。

感谢任何关于问题可能是什么的提示,我已经尝试解决这个问题已经有一段时间了,但是由于我对 Rails 比较陌生,我怀疑我缺少一些基本的东西。

更新:从( http://www.alfajango.com/blog/rails-jquery-ujs-now-interactive/ )添加以下 javascript 可以解决问题,这表明我的表单标签上的 :remote => true 不是t 由 jquery ujs 正确找到或解释。我认为这是一种解决方法,而不是永久修复,所以如果有人知道我的原始代码有什么问题,我将不胜感激。

0 投票
1 回答
1628 浏览

javascript - 远程表单的Rails 406“不可接受”错误?

我正在尝试使用jQuery UJS将远程表单添加到我的 Rails 3 应用程序,尽管表单似乎正确发送了请求,但服务器返回 406“不可接受”错误:

jQuery-UJS 似乎正在发送正确的 HTTP_ACCEPT 标头:

我已经将accounts#update操作剥离到最低限度以尝试调试它,但没有任何效果:

对于它的价值,我正在使用 HTML5 Boilerplate 通过 Google API 加载 jQuery 库,并且我正在使用 Modernizr 让在页面底部而不是在<head>元素中包含 Javascript。

有没有人遇到过这样的事情?我究竟做错了什么?