1

Backbone js を使用して、サービスのようなアプリを作成しています。すべてのアプリケーションには、設定された user_id と application_id があります。そのバックボーンが fetch()、save()、またはその他の RESTful/ajax 関数を呼び出すたびに、user_id と application_id がモデル データと共に自動的に渡されるようにします。

バックボーン モデルを拡張し、すべてのモデルがこのモデルから拡張されていることを確認する必要があることはわかっていますが、何を変更し、親モデルをどのように呼び出すのでしょうか?

疑似例 (よくわからない)

MyModel = Backbone.Model.extend({
    save : function(data) {
        data.application_id = 3;
        data.user_id = 5;
        parent.save(data);
}
});

Scores = MyModel.extend({
      default : {
      score : 0
}
});

//This should automatically grab the application id and user id
scores = new Scores();
scores.set('score', 5);
score.save()

これを正しく達成するにはどうすればよいですか?そして、達成とは、 save() 、 fetch() 、および destroy() で機能するコード内の単一のポイントを意味しますか?

4

2 に答える 2

3

バックボーンの同期を変更するのはどうですか? user_idそして、すべてのapplication_idモデルをオンにして渡したいと確信している場合は、save() fetch() and destroy()このようなことができると思います...

/* alias away the sync method */
Backbone._sync = Backbone.sync;

/* new Backbone.sync method */
Backbone.sync = function(method, model, options) {

    // For example purpose, this will only run on POST, PUT, and DELETE requests
    // If you want you can also set it for method == 'read' for your fetch()

    if (method == 'create' || method == 'update' || method == 'delete') {
        model.set('user_id', userID);
        model.set('application_id', appID);
    }

    /* proxy the call to the old sync method */
    return Backbone._sync(method, model, options);
};

CSRFトークンチェックでこのようなことを行い、クロスサイト登録の偽造を防ぎます. モデルを操作する代わりに、すべての POST、PUT、および DELETE リクエストに、独自のトークンを含む特別な X-CSRF ヘッダーがあることを確認します。

于 2012-09-05T07:52:45.017 に答える
0

値 (appid と userid) が事前に決定されているinitialize場合は、モデルのメソッドでこれを行うことができます

MyModel = Backbone.Model.extend({
  this.set('application_id', appID);
  this.set('user_id', userID);
});

これらの値は現在モデルの一部であるため、すべての CRUD 操作の一部です。

于 2012-09-05T10:48:29.957 に答える