Backbone.js嵌套对象结构
Backbone.js nested object structure
我正在做一个项目,我们的数据模型基本上是这样的。。。
var library = {
location: 'Somewhere'
books: [
{
name: 'Good Book',
publisher: 'Great publisher'
authors: [
{
name: 'Joe Schmoe',
age: '65'
},
{
name: 'Robert Smith',
age: '47'
}
}
}
我正试图找出布置模型结构的最佳方式。
类似。。。
var LibraryModel = Backbone.Model.extend({});
var Book = Backbone.Model.extend({});
var Books = Backbone.Collection.extend({
model: Book
});
var Author = Backbone.Model.extend({});
var Authors = Backbone.Collection.extend({
model: Author
});
这是解决这个问题的最佳方法吗?还有人面对过这样的事情吗?
无论您是否需要N到N、1到N或任何关系,这在很大程度上都是后端问题。除非您严格处理CRUD屏幕,否则主干模型通常不会直接转换为后端模型,尽管它们通常近似于后端模型。
话虽如此,Backbone relational绝对是处理此类情况的好选择。它为处理关系代码提供了一组非常健壮的功能,值得一看
不过,如果你想避开一个大型插件及其相关的配置和需求,有一些简单的技巧可以直接在你的模型中使用。由于您预先了解您的数据结构,因此您可以对需要编写的代码进行大量假设,而不必创建像BB Relational这样非常灵活的系统。
例如,使用上面的数据结构,将图书列表放入图书馆,可以简单到:
Book = Backbone.Model.extend({});
Books = Backbone.Collection.extend({
model: Book
});
Library = Backbone.Model.extend({
initialize: function(){
this.parseBooks();
},
parseBooks: function(){
var data = this.get("books");
this.unset("books", {silent: true});
this.books = new Books(data);
}
});
我已经用了六次这个代码,每次都很好。您可以将相同的模式和假设集扩展到对象模型的每一层。
您可能还需要覆盖模型上的toJSON
方法:
Library = Backbone.Model.extend({
// ... code from above, here
toJSON: function(){
var json = Backbone.Model.prototype.toJSON.call(this);
json.books = this.books.toJSON();
return json;
}
});
根据您需要走多远,您可能最终会重新创建BB Relational已经提供的一半功能。如果你有一个足够大的结构,那么使用这样的插件和声明性关系处理可能会更容易。
IMO,在深入了解BB Relational之前,了解这些基本模式,知道如何为自己做到这一点是值得的。但如果时间有限,我会从BB Relational或其他关系映射器开始(我认为现在还有一些)。
我不会用这种方式处理这个问题,因为你有一个N到N的关系,一本书可以有多个作者一位作者很可能写过一本以上的书。
我想看看主干关系插件
它不是默认的主干网,但它是我能想到的最好的方式。
但是,如果您只需要一个小的解决方案您可以将所有作者放在一个集合中,并在图书模型中使用一个简单的作者ID数组。
- 更改JSON对象的结构
- 嵌套对象结构
- 从json对象聚集数据并创建层次结构
- 如何迭代json对象结构以只获取名称
- ES6非结构化中的计算属性-非结构化整体对象
- 如何在Javascript中连接两个结构不同的对象
- redux 中状态对象的结构
- 文字与原型对象表示法的数据结构
- 从knockout.js中的另一个对象更新一个深度结构化的javascript对象
- JSDoc:返回对象结构
- 通过键将平面对象转换为嵌套结构
- 关于JavaScript对象结构属性的问题
- 如何用以下结构定义一个空的javascript对象,以便我可以动态地将数据插入其中
- 无法识别的数据结构-转换为对象
- 无法通过jQuery查找来定位层次结构中的对象
- Rails结构到JSON对象
- 将字符串(带有结构对象)转换为对象
- 从HTML大纲创建层次结构对象
- 特殊的JavaScript结构:对象定义中的对象类型变量
- Null在Javascript中检查大型层次结构对象