如何构建嵌套的backbone.js模型,这些模型可以被不同的底层同步方法重用

How to build nested backbone.js models that can be re-used with different underlying sync methods

本文关键字:模型 同步方法 构建 何构建 嵌套 js backbone      更新时间:2023-09-26

我正在构建一个javascript重型应用程序,向用户呈现两种不同的视图。一个视图是通过我自己的应用程序的web界面,因此可以使用RESTful API进行连接,另一个视图是在OpenSocial小工具中(因此使用OpenSocial API获取和检索数据)。

到目前为止,我所做的是有一组通用的模型/视图,我可以在web界面和opensocial小工具之间重用,并使用mixin来替换opensocial小工具的同步方法。

MyBaseModel = Backbone.Model.extend({
    ... typical backbone model
});
MyOpenSocialMixin = {
    sync: function(...) {
        // Sync via opensocial here
    }
};
myOpenSocialModel = MyBaseModel.extend(MyOpenSocialMixin);
myOpenSocialModel.sync(); // works on opensocial
myAppModel = new MyBaseModel();
myAppModel.sync(); // works on the normal interface

这对于单个模型非常有效,但对于嵌套模型不起作用(例如,如果MyBaseModel包含许多mysubmodel)。处理这种情况的最佳实践是什么?我的嵌套模型应该继承它们父模型的sync()方法吗?有没有更好的设计模式?

在子类的构造函数中,传递父类的SYNC方法当然是可能的。如果该方法未绑定,则可以像Backbone一样将其复制到子类中:

def initialize(attributes, options) {
    _.extend(this, {sync: options.parent.sync});
}