1

我正在编写一个 javascript 库(在 coffeescript 中),它用作非 RESTfull API 的前端。基本上它的作用是为我的资源定义类,这些类可以进行 API 调用并处理它返回的数据,这样我就可以拥有漂亮而干净的对象。

现在,我想在基于 Backbone 的项目中使用这个库,但也没有骨干(可能在 NodeJS 中)。

将它与 Backbone 一起使用的最简单方法是将我使用此库创建的对象传递给 Backbone 模型构造函数,以便它使用对象的属性填充 Backbone 模型。唯一的问题是这些对象也有它们的功能,所以它们也会附加到模型的“属性”对象上,我对此并不满意。在这种情况下,如果我的对象上有一个名为“doStuff”的函数,我最终会调用 model.attributes.doStuff(),但我不确定这是否有意义。

有没有更好的方法来处理这个?也许是一种通过传递配置选项让我的库创建普通对象或主干模型的方法?

4

1 回答 1

2

我将分离与您的对象关联的数据,以便它们不是直接属性,然后为该数据对象添加 getter/setter。

var myObject =  {
    var data = { .... the data ... };
    var get = function() { return this.data; }
    var set = function(value) { this.data = value; }
};

然后,您可以像这样创建 Backbone 模型。

var x = new myObject();
var model = new Backbone.Model(x.get());
// ... work with model
x.set(model.attributes);

或者,您可以将 Backbone 模型与相同的数据引用链接。

var x = new myObject();
var model = new Backbone.Model();
model.attributes = x.data;

抱歉,如果上面的 Javascript 不正确,但您应该能够理解。

编辑:

您可以包含myObject对模型的第二个参数的引用,但您必须创建自己的模型类。(基于最新的 Backbone 版本)。

var myModel = Backbone.Model.extend({
    /**
     * @type {myObject}
     */
    obj: undefined,

    initialize: function(attributes, options) {
       this.obj = options.obj;
    }
});

var x = new myObject();
var model = new myModel(x.get(),{obj:x});

// now you can use Backbone model normally
model.set('field',123);
// call your own functions
model.obj.foo();
于 2013-08-02T14:17:56.933 回答