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のインスタンスです)には、コードがあります(initialize:):

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