使用backbone.js组织子视图?

时间:2011-12-29 19:50:03

标签: javascript node.js backbone.js

我为骨干新手道歉,但我认为我得到了概念。

例如:您拥有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

这是正确的方法吗?

2 个答案:

答案 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数据

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