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

如何修改您的 Backbone 同步?如果您确定要在每个模型上通过user_idand ,那么您可以做这样的事情,我相信...application_idsave() 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 回答