我已经为此寻找了很长时间,并且看到了很多类似的帖子和答案,但没有什么是我所追求的。我可能以错误的方式处理这个问题。
我正在尝试将新模型添加到集合中,但我想做服务器端验证。如果服务器验证失败,我不希望将新模型添加到(集合的)视图中。
注意。情况是当我收到 200 成功响应代码时(我的后端是 cakephp,cakephp 接收请求并正常处理),但服务器验证意味着没有保存到数据库(即,我不想添加到数据库,因为它会创建不需要的副本)。
这是我的主干代码:
//
// Add the selected school as a school the user manages.
addTeacherSchool: function(view) {
attribs = view.model.attributes;
attribs.school_id = attribs.id;
delete attribs.id;
attribs.user_id = this.model.id;
this.teacherSchoolListView.collection.create(
attribs, {wait: true, success: this.addTeacherSchoolSuccess}
);
},
addTeacherSchoolSuccess: function(model, resp, options) {
// resp is false
},
在我的主干 SchoolListView(this.teacherSchoolListView 是 SchoolListView 的一个实例)中,我有代码(在初始化中:):
this.listenTo(this.collection, 'add', this.render);
在服务器端(cakephp),如果我已经拥有模型的“副本”,则返回 false:
return new CakeResponse(array('body' => json_encode($error_count == 0)));
如您所见,我在 collection.create() 调用中使用了 wait: true 。在将“项目”添加到视图之前,atm 正在做的事情是等待服务器返回响应。但是如果服务器端验证返回错误,我不希望添加该项目。
此外,调用了 addTeacherSchoolSuccess() (这应该发生,因为在 req./resp. 循环中没有错误,只是在服务器端验证中。
关于如何实现我所追求的任何想法?
注意。我可以(实际上是这样做的——尽管我已经删除了它,所以我的代码片段更简单)在客户端进行验证,但我也希望我的服务器端验证能够正常工作。