2

我已经为此寻找了很长时间,并且看到了很多类似的帖子和答案,但没有什么是我所追求的。我可能以错误的方式处理这个问题。

我正在尝试将新模型添加到集合中,但我想做服务器端验证。如果服务器验证失败,我不希望将新模型添加到(集合的)视图中。

注意。情况是当我收到 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. 循环中没有错误,只是在服务器端验证中。

关于如何实现我所追求的任何想法?

注意。我可以(实际上是这样做的——尽管我已经删除了它,所以我的代码片段更简单)在客户端进行验证,但我也希望我的服务器端验证能够正常工作。

4

0 回答 0