1

私はバックボーンに頭を悩ませようとしています (最近の質問の急増が示すように...)。特に、私はこのプロジェクトに取り組んでいます:

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 にリンクしている場所が見つかりません。私の質問は理にかなっていますか?

4

2 に答える 2

1

モデル urlRoot のドキュメントは次のとおりです: http://backbonejs.org/#Model-urlRoot

モデルにを指定した場合はurlRoot、それが使用されます。モデルがコレクションの一部である場合、コレクションのurlプロパティを参照します。

を保存するとき、Backbone は更新に PUT を使用し、作成に POST を使用します。isNew関数の結果に基づいて、どちらを使用するかを決定します。これにより、モデルに id プロパティがあるかどうかがチェックされます。

于 2013-09-09T18:46:57.510 に答える
1

待って、私は自分の質問に答えたかもしれません。/public/js/models/models.js の次の行である必要があります。

urlRoot: "/ワイン"

そして、バックボーンは、「新しい」モデルを実行しているかどうかを認識し、POST 要求を送信する必要があります。更新を行っている場合は、URL に :id を追加し、PUT 要求などを送信する必要があります。それはどのように機能しますか?

于 2013-09-09T18:07:01.433 に答える