我已经为此苦苦挣扎了一段时间;让我们看看是否有人可以帮助我。
尽管自述文件中没有明确说明,但 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#L411
https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/model/states.js#L529 https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/model/states.js#L529
REST 适配器本身不会添加验证支持,但我发现,如果我在 ajax 调用中添加类似的内容,我可以使用来自服务器端的错误对象将模型置于“无效”状态:
error: function(xhr){
var data = Ember.$.parseJSON(xhr.responseText);
store.recordWasInvalid(record, data.errors);
}
所以我可以轻松地进行以下操作:
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.
问题是:如你所见,事务不会尝试重新提交。这是解释的here https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/transaction.js#L76 and here https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/transaction.js#L133.
所以问题是:如果我无法重用提交,我应该如何处理?我有点怀疑这与我异步地将模型放入invalid
状态由阅读文档 https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/model/states.js#L332,这似乎是用于客户端验证的东西。在这种情况下,我应该如何使用它们?