Javascript 在itemview中显示主干模型嵌套属性
最初是我的主干模型Javascript 在itemview中显示主干模型嵌套属性,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,最初是我的主干模型 [ { "id" : 1, "author" : "CA", "city": "LA", "Num_of_books": "5" }, { "id": 2, "author":"John", "city": "AM", "Num_of_books": "10" } ] 我将集合传递给一个layoutout视图,该视图具有复合视图,复合视图中的itemv
[
{
"id" : 1,
"author" : "CA",
"city": "LA",
"Num_of_books": "5"
},
{
"id": 2,
"author":"John",
"city": "AM",
"Num_of_books": "10"
}
]
我将集合传递给一个layoutout视图,该视图具有复合视图,复合视图中的itemview如下
var View = Backbone.Marionette.ItemView.extend({
tagName: 'option',
constructor: function(options) {
this.attributes = {
value: options.model.id
};
console.log(options);
Backbone.Marionette.ItemView.prototype.constructor.apply(this, arguments);
},
template: _.template("<%= author %>")
});
现在,我如何在项目视图中访问我的模型属性,以便实现以下功能
<option value="idValue"> Author Name </option>
理想情况下,这些数据应该是一个集合,而不是一个模型。以这种方式使用它与主干网和木偶网的模式背道而驰,并将在以后引起各种各样的可维护性问题 考虑一下这样的情况:
var Book = Backbone.Model.extend({
// .. book model config
});
var BookShelf = Backbone.Collection.extend({
model: Book
});
var BookOption = Marionette.ItemView.extend({
tagName: 'option',
template: _.template('<%= author %>'),
attributes: function() {
return {
value: this.model.id
}
}
});
var BookList = Marionette.CollectionView.extend({
tagName: 'select',
itemView: BookOption
});
// ------
var bookshelf = new BookShelf();
bookshelf.add([{
"id": 1,
"author": "CA",
"city": "LA",
"Num_of_books": "5"
},{
"id": 2,
"author": "John",
"city": "AM",
"Num_of_books": "10"
}]);
var bookList = new BookList();
你确定这是最好的方法吗?我理解您为什么这样做,但您知道可以使用下划线来指向集合中的特定id,对吗。在此处查找this.attributes,{id:idValue}。将集合保留为数组是有帮助的,因为它强制了项的顺序。劫持构造器也有点麻烦。onBeforeRender还不够?@josephnvu Ya似乎应该离开模型集合数组。会让生活更轻松,我非常同意。经过一段时间的思考,如果我使用我原来的json格式,生活似乎会轻松得多。
<option value="idValue"> Author Name </option>
var Book = Backbone.Model.extend({
// .. book model config
});
var BookShelf = Backbone.Collection.extend({
model: Book
});
var BookOption = Marionette.ItemView.extend({
tagName: 'option',
template: _.template('<%= author %>'),
attributes: function() {
return {
value: this.model.id
}
}
});
var BookList = Marionette.CollectionView.extend({
tagName: 'select',
itemView: BookOption
});
// ------
var bookshelf = new BookShelf();
bookshelf.add([{
"id": 1,
"author": "CA",
"city": "LA",
"Num_of_books": "5"
},{
"id": 2,
"author": "John",
"city": "AM",
"Num_of_books": "10"
}]);
var bookList = new BookList();