我为骨干新手道歉,但我认为我得到了概念。
例如:您拥有Bookstore的模型>书架>书>页
你如何组织这个,以便像这样控制视图:
Bookstore.render() //to view the bookstore
Bookstore.bookshelf.get(shelfId).render() //to view shelf
Bookstore.bookshelf.get(shelfId).book.get(bookId).render() //to view book
Bookstore.bookshelf.get(shelfId).books.get(bookId).pages.at(0).render() //to view page
这是正确的方法吗?
答案 0 :(得分:4)
是的可能并且我为您创建了一个工作示例,我认为这只是组织Backbone JS架构的另一种方法,我认为这是一个非常好的主意。
所有型号必须具备:
调用其视图的render
方法的render
方法。我创建了一个基础模型,我为Bookshelf,Book和Page模型进行了扩展。
initialize
方法,它创建了集合(书架书籍,书籍页面......)
最后我实例化了Bookstore模型并完成了它!
示威:http://jsfiddle.net/Atinux/DvbA3/show/
试试控制台:
Bookstore.render()
Bookstore.bookshelves.get(1).render()
Bookstore.bookshelves.get(1).books.get(2).render()
Bookstore.bookshelves.get(1).books.get(2).pages.at(0).render()
有评论的代码可在此处找到:http://jsfiddle.net/Atinux/DvbA3/
我认为最好的方法是了解代码的工作原理。如果您有完全理解我的代码的问题,请随时问我。
JSON数据必须如下所示:
var data = {
bookshelves: [{
id: 1,
name: 'Science',
books: [{
id: 1,
name: 'Abstract Algebra',
pages: [
{ content: 'Page 1 Abstract'},
{ content: 'Page 2 Abstract'},
{ content: 'Page 3 Abstract'}
]
}, {
id: 2,
name: 'Chemistry and Technology of Fertilizers',
pages: [
{ content: 'Chemistry page 1' },
{ content: 'Chemistry page 2' },
{ content: 'Chemistry page 3' }
]
}
]
}, {
id: 2,
name: 'Psychology',
books: [{
id: 1,
name: 'How to Think Straight About Psychology',
pages: [
{ content: 'Psychology page 1' },
{ content: 'Psychology page 2' },
]
}
]
}
]
};
答案 1 :(得分:0)
@Alley,你想要做的就是违反MVC模式,因为模型对象必须与视图无关。 @Atinux答案可能有效但会引入视图和模型对象之间的直接依赖关系。
所有表现方法必须驻留在您查看对象中。视图和模型之间的通信必须使用事件完成。 所以,而不是做:Bookstore.bookshelf.get(shelfId).render() 你应该按照以下方式做一些事情:bookshelfView.render()