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();