我在别处问过这个问题。但我也会在这里问,以防谁知道答案。
我最近写了一个简单的网络应用程序。它总共有两个视图,用户应该能够在两个视图之间来回切换。在我看来,setView 方法可以改变应用程序视图的工作。通过单击链接从索引视图切换到显示视图时,它工作得很好。但是,当我单击链接时,它无法返回索引视图。它只是弹出此错误消息“请将带有选择器''的 View#manage 属性设置为 true”。由于旧视图对象在切换到另一个视图时应该被破坏,为什么它会出现这个错误,除非它没有像我想象的那样工作。
下面是我的咖啡脚本代码片段。MyApp.Routers.Home = Backbone.Router.extend(路线:'books':'showBooksIndex''books/:id':'showBook'
initialize: (options) ->
@buildLayout()
buildLayout: ->
@layout = app.useLayout("main")
showBooksIndex: ->
@cleanLayout()
@books = new MyApp.Collections.Book();
@viewIndex = new MyApp.Views.BooksIndex(
collection: @books;
)
@layout.setView('#app', @viewIndex)
showBook: (id) ->
@cleanLayout()
@book = new MyApp.Models.Book id: id
@view = new MyApp.Views.BookShow model: @book
@layout.setView('#app', @view)
cleanLayout: ->
appView = @layout.getView('#app')
if appView
appView.remove()
MyApp.Views.BookShow = Backbone.View.extend(
id: "book-show"
className: "book-card"
manage: true
template: JST['templates/books/show']
initialize: ->
@model = @options.model
_this = @
@model.fetch(
success: (model, resp)->
_this.render();
)
MyApp.Views.BooksIndex 具有与 BookShow 视图类似的代码。
缓存视图也可能是一种解决方案。此方法将解决此问题,因为可以避免重新创建视图对象。但由于我的应用程序有很多照片,我希望每次应用程序视图更改时都从服务器获取数据。我不确定这是否是正确的方法。提前感谢您分享您的见解。