处理 Ember.js 中的验证错误

2024-01-20

我有一个 Rails 应用程序,为 Ember 前端提供 json 服务。

我正在尝试在客户端的表单上显示验证错误。

Rails 返回这个 json:

{"errors":{"hometown":["is too long (maximum is 64 characters)"]}}

在当前路线的车把模板中,我尝试迭代错误,但没有得到错误部分的任何输出:

<div class="form-group">
  <label>Hometown</label>
  {{#each errors.hometown}}
    {{this}}
  {{/each}}
  {{input type="text" class="form-control" valueBinding="effectiveUser.hometown" disabled=entryNotAllowed size="50"}}
</div> 

我还根据这个博客更新了我的RESAdapter:https://marcqualie.com/2014/04/model-errors-in-emberjs https://marcqualie.com/2014/04/model-errors-in-emberjs包括:

  ajaxError: function(jqXHR) {
    var error = this._super(jqXHR);
    if (jqXHR && jqXHR.status === 422) {
      var jsonErrors = Ember.$.parseJSON(jqXHR.responseText)["errors"];
      return new DS.InvalidError(jsonErrors);
    } else {
      return error;
    }
  }

我仍然真的不明白这个错误对象的上下文是什么以及为什么我的视图可以访问它,但几个不同的来源似乎说这个设置应该有效。任何见解将不胜感激。


最近的 Ember Data Beta 自 1.0 Beta 12 起将错误传递给模型。店铺流程InvalidError为您提供结果并将错误放在模型上。

我提交了一份PR #2392 https://github.com/emberjs/data/pull/2392它已被合并,使您的模型序列化器有机会在模型上设置之前从错误负载中提取错误。默认实现确保错误负载键现在正确映射到属性键,而以前的情况并非如此。

Ember Data 仍然只会将错误应用于定义了相应属性的模型。这一直是令人沮丧的根源,因为经常存在适用于整个模型的错误(例如“基础”)。这已包含在未决的问题 #1984 https://github.com/emberjs/data/pull/1984,使用以下解决方法,直到合并为止。

DS.Model.reopen({
    adapterDidInvalidate: function(errors) {
      var recordErrors = this.get('errors');
      for (var key in errors) {
        if (!errors.hasOwnProperty(key)) continue;
        recordErrors.add(key, errors[key]);
      }
    }
});

您的模板代码还应该遵循中的示例DS 错误 http://emberjs.com/api/data/classes/DS.Errors.html:

{{#each message in errors.messages}}
  <div class="error">
    {{message}}
  </div>
{{/each}}

您可能希望使用错误对于 http://emberjs.com/api/data/classes/DS.Errors.html#method_errorsFor方法来定位特定属性。

您可能还想使用帮助程序或组件来提取属性特定的模型错误并对其进行适当的标记。一些示例代码 https://github.com/indexiatech/ember-forms/blob/master/addon/control_help.js有关如何执行此操作的信息,请参阅 ember-forms 附加组件。

我也刚刚发现了一个Ember Data 服务器端错误处理教程 http://alexspeller.com/server-side-validations-with-ember-data-and-ds-errors/这可能很有用,只需忽略 RESTAdapter 位,因为它现在已经过时了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理 Ember.js 中的验证错误 的相关文章

  • 恢复对 ember 数据模型的更改

    有没有办法轻松恢复对 Ember 数据模型的更改 我有一个绑定到编辑视图的模型 此视图使用户能够取消编辑 此时我想恢复对模型的更改 有没有一种简单的方法可以做到这一点 而无需克隆所有值 从 Ember Data 版本 2 开始 不再有交易
  • Ember.js 动态子视图

    我无法让 ember 渲染动态子视图 似乎一旦渲染了子视图 绑定就会丢失 这是一个jsfiddle http jsfiddle net zaius XYzfa http jsfiddle net zaius XYzfa 当您在两个编辑器页面
  • Ember 未在生产环境中加载某些图像

    我有一个 Ember cli 1 13 应用程序 它在公共目录中存储了很多图像 现在 它将正确加载除特定组件中的图像之外的所有图像 该组件的调用方式如下 list item url list url name List Name price
  • Ember JS 过渡到嵌套路由,其中​​所有路由都是视图中的动态段

    我们正在使用 EmberJS 编写一个应用程序 然而 我们对这个框架仍然陌生 我们很难解决一些看似简单的问题 模型非常简单 有 3 个模型 Queue Task 和 Image 我们对所有路由使用动态 URI 段 并且这些模型的路由嵌套在以
  • emberjs 对一条路线使用多个路径/url

    在 Ember 中我可以使用这个 App Router map function this route accomodations 因此 如果访问 accomodations 它将加载该视图 我还可以补充 App Router map fu
  • 对 EmberJS 对象的反思?如何在事先不知道密钥的情况下查找属性密钥列表

    如果您事先不知道所有密钥 是否有办法检索 EmberJS 对象的 set at creations 属性 通过检查器 我看到所有似乎存储在元对象中的对象属性values哈希 但我似乎找不到任何方法来恢复它 例如object getPrope
  • 在 EmberJS 中获取父路由

    我正在制作一个可重用 有点多态 的评论小部件 我想要一个按钮 使我能够返回到父路由 例如 如果我位于 blog posts 1 comments 我希望该按钮将我带回 blog posts 1 我目前正在使用transitionToRout
  • 2015 年重新审视 Ember Handling 401

    我可以在 Ember Ember Data 中找到大量询问 回答如何从 Rails 后端处理 401 的老问题 许多 如果不是全部的话 在这一点上似乎已经过时了 我已经尝试了我能找到的一切 Ember 数据处理 401 https stac
  • ember-data-1.0.0 activemodeladapter 错误在传递给“push”的哈希中包含“id”

    我在后端使用 ember data 和带有 Rails 和 mongoid mongodb 的 activemodel 适配器 每当我向 Rails 应用程序发出请求时 emberjs 都会显示返回的数据 但在 chrome 开发人员控制台
  • 在 #each 内渲染视图

    每当我尝试在 each 块内渲染视图时 我都会收到一条 PrecompilationError 消息 Compiler said Error each doesn t match view Example each posts view A
  • 在哪里放置固定装置?

    我应该在使用 ember cli 生成的 Ember JS 应用程序中的哪里定义固定装置 我尝试过很多地方 例如app js并在一个名为 fixtures 的文件夹中 经过一番挖掘后我发现改变Ember MODEL FACTORY INJE
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • Emberjs 将多个控制器加载到一个控制器中

    SCENARIO我目前有一个IndexRoute 我想将另外 3 个控制器加载到其中 另外 3 个控制器称为Sports News Business 我阅读了 embersjs 文档 它指出您需要实现renderTemplate钩入Inde
  • EMBER直接路由URL访问不加载数据

    当我直接从浏览器访问我的网址时遇到问题 它不会加载我的单一帖子信息 示例 index html posts 10052308 但当我访问 index html posts 然后单击我的一篇文章时 它会起作用 我的网址会更改为 index h
  • 将检索到的 Ember 数据记录转换为普通对象的 Ember 方法是什么?

    我使用以下方法检索了一系列记录var items store find model 返回的对象是一个实例RecordArray 并包含多个条目 每个条目都有一个 Ember 对象 允许我在记录中获取和设置属性 一切看起来都不错 现在我需要将
  • Rails 和 Ember 的 JSONAPI 强参数

    我将 Ember 与 ember data 和 Rails api 一起使用 我有一个 createRecord 和 save 来保存工作正常的记录 用于在 Rails 中创建记录的发布请求的网络选项卡中的有效负载如下所示 data att
  • 如果 POST 响应仅包含 ID,如何将数据保存到我的 Ember 存储?

    Ember 数据期望我的服务器在每次成功后返回完整的对象POST 但是 我的 API 只返回一种元对象 其中包含id 当 Ember 收到此对象时 记录中的现有数据将被删除 除了id 例如 当我这样做时 var asset App Asse
  • 获取对给定模型对象创建的 EmberJS 视图的引用?

    假设我有一个清单DefinedWord对象 每个对象都渲染在 each 块作为列表DefinedWordViewdiv 位于页面底部 当用户单击一个单词时 我会查找关联的DefinedWord 现在我想要一个参考DefinedWordVie
  • 加载 Ember.View 的内容后初始化 jQuery 插件

    DEBUG Ember VERSION 1 0 0 rc 6 ember js DEBUG Handlebars VERSION 1 0 0 rc 4 ember js DEBUG jQuery VERSION 1 9 1 控制器是一个Em
  • Ember.js - 从计算属性返回 unicode 字符

    我试图从计算属性返回 unicode 字符 但是 不断逃脱 amp 我什至尝试过像这样返回 Handlebars SafeString return new Ember Handlebars SafeString 61573 产生相同的结果

随机推荐