私はバックボーンに頭を悩ませようとしています (最近の質問の急増が示すように...)。特に、私はこのプロジェクトに取り組んでいます:
https://github.com/ccoenraets/nodecellar http://nodecellar.coenraets.org/#
新しいワインの「保存」ボタンをクリックすると何が起こるかを概念的に理解したいです。たとえば、次のようなものです。
http://nodecellar.coenraets.org/#wines/506df6b6849a990200000001
私はそれが次のようになると考えています:
1) Backbone winedetails ビューは、保存ボタンのクリックをイベントとしてキャッチし、「保存前」メソッドを起動します。/public/js/views/winedetails.js から以下を参照してください。
beforeSave: function () {
var self = this;
var check = this.model.validateAll();
if (check.isValid === false) {
utils.displayValidationErrors(check.messages);
return false;
}
this.saveWine();
return false;
},
saveWine: function () {
var self = this;
console.log('before save');
this.model.save(null, {
success: function (model) {
self.render();
app.navigate('wines/' + model.id, false);
utils.showAlert('Success!', 'Wine saved successfully', 'alert-success');
},
error: function () {
utils.showAlert('Error', 'An error occurred while trying to delete this item', 'alert-error');
}
});
},
その Save メソッド (2 番目のメソッド) では、this.model.save への呼び出しがあります。server.jsファイルで証明されているように、そのモデルの保存メソッドは「/ wines」URLにPUTリクエストを作成する必要があります(これはnode.jsサーバー用です):
app.get('/wines', wine.findAll);
app.get('/wines/:id', wine.findById);
app.post('/wines', wine.addWine);
app.put('/wines/:id', wine.updateWine);
app.delete('/wines/:id', wine.deleteWine);
そこから明らかに、routes/wines.js で定義されている addWine メソッドを実行します。私が理解していないのは、モデルがどの URL にリクエストを送信するかを理解する方法です。model.save メソッドを正しい REST API にリンクしている場所が見つかりません。私の質問は理にかなっていますか?