backbone.layoutmanager生成错误消息“set`View#manage` property with selector''to`true`”

时间:2013-02-06 16:12:07

标签: backbone.js backbone-layout-manager

我在别处问过这个问题。但是我也会在这里问它,以防谁知道答案。

我最近写了一个简单的网络应用程序。它总共有两个视图,用户应该能够在两个视图之间前后移动。对我来说,setView方法可以改变app视图。通过单击链接从“索引”视图切换到“显示”视图时,它可以正常工作。但是,单击链接时无法返回“索引”视图。它只会弹出此错误消息“请将View#manage property with selector''设置为true”。由于旧的视图对象在切换到另一个视图时应该被破坏,为什么它会出现这个错误,除非它没有像我想象的那样工作。

下面是我的coffeescript代码的片段。         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视图具有类似的代码。

缓存视图可能也是一种解决方案。这种方法可以解决这个问题,因为可以避免重新创建视图对象。但由于我的应用程序有很多照片,我更愿意在每次应用程序视图更改时从服务器获取数据。我不确定这是否是正确的方法。提前感谢您分享您的见解。

0 个答案:

没有答案