Backbone js collection.create()如何只在服务器端保存成功时更新视图

时间:2013-08-13 07:47:33

标签: backbone.js

我已经为此寻找了很多年,并且看过很多类似的帖子和答案,但没有什么是我正在追求的。我可能以错误的方式接近这个。

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

NB。情况是当我得到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。在将“项目”添加到视图之前,正在执行的操作是等待响应从服务器返回。但是如果服务器端验证返回错误,我不希望添加该项。

此外,调用addTeacherSchoolSuccess()(应该发生这种情况,因为req。/ resp。周期中没有错误,只是在服务器端验证。

关于如何实现我的目标的任何想法?

NB。我可以(并且实际上 - 虽然我已经删除它以便我的代码片段更简单)做验证客户端,但我也希望我的服务器端验证能够运行。

0 个答案:

没有答案