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

时间:2011-09-05 03:29:25

标签: javascript inheritance backbone.js

我正在构建一个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()方法?有更好的设计模式吗?

1 个答案:

答案 0 :(得分:3)

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

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