mic*_*ien 42 ember.js ember-data
ember-data.js:https://github.com/emberjs/data/tree/0396411e39df96c8506de3182c81414c1d0eb981
简而言之,当出现错误时,我想在视图中显示错误消息,然后用户可以1)取消,这将回滚事务2)纠正输入错误并成功提交事务,传递验证服务器.
以下是来自源代码的代码段.它不包含错误回调.
updateRecord: function(store, type, record) {
var id = get(record, 'id');
var root = this.rootForType(type);
var data = {};
data[root] = this.toJSON(record);
this.ajax(this.buildURL(root, id), "PUT", {
data: data,
context: this,
success: function(json) {
this.didUpdateRecord(store, type, record, json);
}
});
},
Run Code Online (Sandbox Code Playgroud)
总的来说,从服务器接收错误和更新视图的流程是什么?似乎错误回调应该将模型置于一个isError状态,然后视图可以显示相应的消息.此外,交易应该保持脏.这样,交易就可以使用了rollback.
不过,似乎使用store.recordWasInvalid正朝着正确的方向发展.
She*_* Yu 42
本周末我试图想出同样的事情.关闭卢克所说的内容,我仔细研究了最新提交的余烬数据源(12月11日).
TLDR; 处理烬数据更新/创建错误,简单地定义becameError()和becameInvalid(errors)你的DS.Model实例.由RESTadapter的AJAX错误回调触发的级联最终将调用您定义的这些函数.
例:
App.Post = DS.Model.extend
title: DS.attr "string"
body: DS.attr "string"
becameError: ->
# handle error case here
alert 'there was an error!'
becameInvalid: (errors) ->
# record was invalid
alert "Record was invalid because: #{errors}"
Run Code Online (Sandbox Code Playgroud)
以下是完整的资料来源:
在REST适配器中,这里给出了AJAX回调错误函数:
this.ajax(this.buildURL(root, id), "PUT", {
data: data,
context: this,
success: function(json) {
Ember.run(this, function(){
this.didUpdateRecord(store, type, record, json);
});
},
error: function(xhr) {
this.didError(store, type, record, xhr);
}
});
Run Code Online (Sandbox Code Playgroud)
didError 在这里定义,它依次调用商店的recordWasInvalid或recordWasError,具体取决于响应:
didError: function(store, type, record, xhr) {
if (xhr.status === 422) {
var data = JSON.parse(xhr.responseText);
store.recordWasInvalid(record, data['errors']);
} else {
store.recordWasError(record);
}
},
Run Code Online (Sandbox Code Playgroud)
反过来,store.recordWasInvalid和store.recordWasError(在这里定义)调用记录(DS.Model)的处理程序.在无效的情况下,它将来自适配器的错误消息作为参数传递.
recordWasInvalid: function(record, errors) {
record.adapterDidInvalidate(errors);
},
recordWasError: function(record) {
record.adapterDidError();
},
Run Code Online (Sandbox Code Playgroud)
DS.Model.adapterDidInvalidate和adapterDidError(在这里定义)简单send('becameInvalid', errors)或send('becameError')最终引导我们到这里的处理程序:
didLoad: Ember.K,
didUpdate: Ember.K,
didCreate: Ember.K,
didDelete: Ember.K,
becameInvalid: Ember.K,
becameError: Ember.K,
Run Code Online (Sandbox Code Playgroud)
(Ember.K只是一个返回的虚拟函数this.见这里)
因此,得出的结论是,你只需要定义的功能becameInvalid,并becameError在模型处理这些情况.
希望这有助于其他人; 文档当然没有反映这一点.
| 归档时间: |
|
| 查看次数: |
12071 次 |
| 最近记录: |