我有一段时间一直在努力奋斗; 让我们看看是否有人可以帮助我.
虽然在自述文件中没有明确说明,但是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状态这一事实有关- 通过阅读文档,它似乎是用于客户端验证的东西.在这种情况下,我该如何使用它们?
我有两个型号:
App.User = DS.Model.create({
comments: DS.hasMany('App.Comment')
});
App.Comment = DS.Model.create({
user: DS.belongsTo('App.User')
});
Run Code Online (Sandbox Code Playgroud)
当用户被删除时,它也会删除后端的所有注释,因此我应该从客户端身份映射中删除它们.
我在其他地方列出了系统上的所有注释,因此在删除用户之后它就会崩溃.
有没有办法指定这种对关联的依赖?谢谢!
我正在尝试实现一些我认为有一个简单答案的东西,但不知何故我找不到它的源代码ember-data.
我想在将一组特定的修改提交到数据存储区后触发一个操作.这是我目前的代码:
var transaction = App.store.transaction();
user = App.get('currentUser');
transaction.add(user);
user.set('name', "Michael Jackson");
transaction.commit();
App.navigate('dashboard');
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是在这个用户的isDirty属性上添加一个观察者,但是a)它似乎不是惯用的,更重要的是b)我必须在最后手动删除那个观察者 - 如果某些异常在两者之间增加,则容易出错.例如,不会被删除.
有任何想法吗?你会怎么做?