2012-03-28 4 views
0

ノートを保存する時に特別なエンコーディング:私はこれが間違っている知っているが、これは、サーバーチームによる技術的な要件です。バックボーン:

私は、Backbone.Modelを拡張するUserオブジェクトを持っています。それは、サーバーからの通常のJSONを使ってデータを受け取ります。

ただし、同じ情報を保存してURLエンコードのメールをエンコードする必要があります。

データを受信すると、Backbone.Model.parseメソッドでデータを前処理することは可能ですが、送信前にデータを前処理する方法はありますか? (syncメソッドをオーバーライドしないで)

答えて

1

私はエンコードするデータのフォーマットを変更するためにBackbone.syncをオーバーロードしました。しかし、この方法では、配列である属性を保存することが問題になります。

おそらく、同期を無効にするより良い方法がありますが、このコードをbackbone.jsファイルの1180行目に追加しました。

//convert to form encoded 
if (Backbone.sendFormEncoded) { 
    if (type === 'PUT' || type === 'DELETE' || type === 'POST') { 
    params.contentType = 'application/x-www-form-urlencoded'; 
    var kvps = [], regEx = /%20/g;  
    var obj = model.toJSON(); 
    for (var key in obj) { 
     if (obj.hasOwnProperty(key)) { 
     if(obj[key]) { 
      kvps.push(encodeURIComponent(key).replace(regEx, "+") + "=" + encodeURIComponent(obj[key].toString()).replace(regEx, "+")); 
     } else { 
      kvps.push(encodeURIComponent(key).replace(regEx, "+") + "=" + encodeURIComponent(obj[key])); 
     } 
     } 
    } 
    params.data = kvps ? kvps.join('&') : {}; 
    } 
} 

このコードブロックを実行するには、必ずBackbone.sendFormEncodedをtrueに設定してください。

関連する問題