相关疑难解决方法(0)

什么是余烬数据验证的标准模式?(无效状态,成为无效......)

我有一段时间一直在努力奋斗; 让我们看看是否有人可以帮助我.

虽然在自述文件中没有明确说明,但是ember-data提供了一些验证支持.您可以在代码和文档的某些部分看到:

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/model/states.js#L411

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/model/states.js#L529

REST适配器本身不添加验证支持,但我发现如果我在ajax调用中添加这样的东西,我可以使用来自服务器端的errors对象将模型置于"无效"状态:

error: function(xhr){
  var data = Ember.$.parseJSON(xhr.responseText);
  store.recordWasInvalid(record, data.errors);
}
Run Code Online (Sandbox Code Playgroud)

所以我可以轻松地做到以下几点:

var transaction = App.store.transaction();
var record = transaction.createRecord(App.Post);
record.set('someProperty', 'invalid value');
transaction.commit()
// This makes the validation fail

record.set('someProperty', 'a valid value');
transaction.commit();
// This doesn't trigger the commit again.
Run Code Online (Sandbox Code Playgroud)

问题是:如您所见,交易不会尝试重新发布.这里和这里解释了这一点.

所以问题是:如果我不能重用提交,我该如何处理?我有点怀疑与我将异常地将模型放到invalid状态这一事实有关- 通过阅读文档,它似乎是用于客户端验证的东西.在这种情况下,我该如何使用它们?

ember.js ember-data

16
推荐指数
1
解决办法
3140
查看次数

灰烬数据交易和重新提交表格

我正在使用ember(+ data)并构建了一个简单的注册表单,但是在服务器端验证错误之后我无法使表单(和ember-data事务)正常工作.

我正在关注https://github.com/dgeb/ember_data_example作为如何使用事务的指南,它主要适用于Happy Path,但是在服务器端验证错误之后,我无法获得ember-data单击"提交"时重新提交API请求.

我做了一些挖掘,我认为我错过了一些与模型失效后重置事务有关的步骤......

Github和App

您可以在http://emb.herokuapp.com/上试用该应用并重现该问题

您还可以访问https://github.com/justinfaulkner/ember-data-resubmit查看完整的源代码.

摄制

您可以使用@ example.com上的电子邮件地址在我的应用程序中填写表单,从而触发虚假的服务器端错误.Rails API将响应422并将错误对象键入用户名/电子邮件字段.

该字段应以红色突出显示错误 - 将电子邮件地址编辑为应该有效的内容,然后再次单击"提交".在chrome中打开开发人员工具时,我看不到ember-data通过点击发送http请求(但控制器中的console.log表示确实正在接收点击).

应该怎么做

在使用错误修改字段后,ember-data(我认为)会将模型更改invalid为uncommitted以便在下次commit调用时提交它.当我单击Submit时,ember-data应该将HTTP请求发送到我的api,而ember应该转换为"Congrats!".页.

然而,相反,形式就在那里.没有http请求.没有过渡到"恭喜!".

这是我更新输入后点击提交几(18)次后的屏幕截图:

提交按钮单击已收到,但没有http请求

片段

以下是我的余烬应用程序的一些片段:

IndexRoute

我的路线使用startEditing类似于ember_data_example的做法:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return null;
  },
  setupController: function(controller) {
    controller.startEditing();
  },
  deactivate: function() {
    this.controllerFor('index').stopEditing();
  }
});
Run Code Online (Sandbox Code Playgroud)

的IndexController

我IndexController的模型是在ember_data_example之后建模的ContactsNewController

App.IndexController = Ember.ObjectController.extend({
  startEditing: function() {
    this.transaction = this.get('store').transaction();
    this.set('content', this.transaction.createRecord(App.User));
  },
  submit: function(user){
    console.log("submitting!");
    this.transaction.commit(); …
Run Code Online (Sandbox Code Playgroud)

ember.js

11
推荐指数
1
解决办法
2601
查看次数

标签 统计

ember.js ×2

ember-data ×1