gpt4 book ai didi

backbone.js - 嵌套Backbone.js集合的更好解决方案

转载 作者:行者123 更新时间:2023-12-03 14:15:14 26 4
gpt4 key购买 nike

我的许多Backbone模型经常处理嵌套模型和集合,到目前为止,我手动使用defaultsparsetoJSON的组合来实现嵌套:

ACME.Supplier = Backbone.Model.extend({
defaults: function() {
return {
contacts: new ACME.Contacts(),
tags: new ACME.Tags(),
attachments: new ACME.Attachments()
};
},

parse: function(res) {
if (res.contacts) res.contacts = new ACME.Contacts(res.contacts);
if (res.tags) res.tags = new ACME.Tags(res.tags);
if (res.attachments) res.attachments = new ACME.Attachments(res.attachments);

return res;
}
});

ACME.Tag = Backbone.Model.extend({
toJSON: function() {
return _.pick(this.attributes, 'id', 'name', 'type');
}
});


我已经看过其中的一些插件,它们基本上与上面的插件相同,但是控制更少,样板更多,所以我想知道是否有人对这个常见的Backbone.js问题有更好的解决方案。



编辑:我最终采用以下方法:

ACME.Supplier = Backbone.Model.extend({
initialize: function(options) {
this.tags = new ACME.Tags(options.tags);
},

parse: function(res) {
res.tags && this.tags.reset(res.tags);

return res;
}
});

ACME.Tag = Backbone.Model.extend({
toJSON: function() {
return _.pick(this.attributes, 'id', 'name', 'type');
}
});


值得注意的是,后来我发现您需要通过 options对象将嵌套模型/集合数据从构造函数传递到嵌套模型的构造函数中。

最佳答案

我认为您的方法没有任何问题。

恕我直言,Model.parse()方法是否满足以下要求:如果需要特殊的解析行为,则将其覆盖。

我唯一想改变的就是这样的事情:

if (res.tags) res.tags = new ACME.Tags(res.tags);


为了这:

if (res.tags) this.tags.reset(res.tags);


由于您已经有 ACME.Tags集合的实例,因此可以重复使用它。

另外,我真的不太喜欢 defaults实现,我习惯在 Model.initialize()中进行此初始化,但是我认为这是一个问题。

关于backbone.js - 嵌套Backbone.js集合的更好解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10409436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com