2012-01-03 6 views
3

をPUT/POSTを防ぐ:BACKBONE.JS - の例として、以下のものを使用してmodel.validate失敗に

var Case = Backbone.Model.extend({ 

    initialize: function(){ 

    this.bind("error", function(model, error){ 
     console.log(error) 
     }); 
    }, 

    url: function() { 
    return '/api/kase?id=' + this.get("id"); 
    }, 

    validate: function(attrs) { 

    return "An error"; 



    } 
}); 

この場合、validateメソッドは呼び出されません。この中

var kase = new Case(); 
kase.save(); 

validateメソッドが呼び出されない場合:

var kase = new Case({subject: null}); 
kase.save(); 

この場合、validateメソッドは呼び出されますが、POST

var kase = new Case(); 
kase.set("subject",null); 
// An error 
kase.save(); 
// POST http://localhost.local/api/kase?id=undefined 404 (Not Found) 

この動作は期待どおりですか?クライアント側の検証が失敗したときにPOST/PUT要求を '取り消す'ことに関して何か不足していますか?または、保存メソッドを起動する前に有効なモデルをチェックする必要がありますか? (ペニーがちょうど落ちたかもしれないと思う)。

どのようなガイダンスをいただければ幸いです。

答えて

2

パラメータを指定せずに保存を呼び出すと、モデルの現在の状態がサーバーに送信されます(空の場合)。モデルデータは更新されません。あなたが検証されるデータを使用して保存メソッドを呼び出した場合、検証が失敗した場合一方、それが停止します。

var kase = new Case(); 
kase.save({subject:null}); 

はエラーをログに記録し、サーバに投稿する前に停止する必要があります。

+0

多くのおかげでnikoshr。それが私が探していた説明でした。敬具 –

0

モデルのsaveを呼び出すコードがありますか?

モデルの属性を設定するときに、バックボーンはサーバーを呼び出しません。検証が失敗しても

+0

申し訳ありませんが、私は上記の例を使用して私の問題を簡素化しようとしました。後ろ向きでは間違いでした。より適切な例で質問を更新します。入力いただきありがとうございます。 –

+0

私の質問がより正確に反映されるように、例が更新されました。 –

関連する問題