1

backbone.js の実験を始めたばかりで、それを使って最初のフロントエンド モジュールを設計しているときに障害にぶつかりました。ここに私が持っているものがあります:

基本的な todos チュートリアルに従い、カスタム REST API にコメント システムを作成しました。大丈夫です。

SOと同じように、コメントごとに賛成票または反対票を投じるボタンがあります。にあるREST APIを呼び出したい

POST /api/comments/vote/:id

パラメータ「方向」(上または下) も渡されます。

私のコメントビューには、次のようなコメントモデルで別の関数を呼び出す関数があります。

vote_up: function() {
    this.model.voteUp();
    return false;
}

モデルの関数:

voteUp: function() {
    var up_votes = this.get('up_votes') - 0;
    up_votes++;
    this.save({up_votes: up_votes});
}

this.save実際にコメント API を呼び出し、すべてのパラメーターを POST として送信する必要はないと確信しています。

backbonejs の方法でこれを行う方法がわかりません (標準的なものを探しています)。

4

2 に答える 2

0

標準的な方法は、Backbone の urlRoot プロパティを利用することだと思います。

var Vote = Backbone.Model.extend({urlRoot : '/api/comments/vote'});

// ....in comments view:

vote_up: function() {
    // send HTTP Post '/api/comments/vote/' -- server will create ID
    new Vote({direction: 1}).save()
    return false;
}

Id がすぐに必要な場合、または挿入の成功に反応する場合は、 にsuccessコールバックを渡すことができますsave

参照: http://backbonejs.org/#Model-save

于 2013-05-18T15:56:57.017 に答える
0

手動$.ajaxで呼び出して/api/comments/vote/:id、賛成票か反対票かを伝える必要があります。次に/api/comments/vote/:id、アトミック インクリメントまたはアトミック デクリメントをデータベースに送信し、新しい値を読み取り、それを送り返します。次に、成功ハンドラーは、クライアント側の値を更新する$.ajaxことができます。set

あなたのvoteUp実装は、いくつかの明らかなタイミングの問題の影響を受けます: JavaScript で 6 つの賛成票があり、その後 11 人の他の人が賛成票を投じvoteUp、新しい賛成票が発生したことをサーバーに伝えようとするとどうなるでしょうか? サーバー側のコードであっても、このようなカウンターを維持しようとするべきではありません。

これを行うための Backboney の方法は実際には存在せず、正しい方法とあらゆる種類の間違った方法があると言いたいのだと思います。それを正しい方法で行い、それが Backboney の方法であることを宣言します。

于 2013-05-18T07:41:10.723 に答える