0

私は他の場所でこの質問をしました。しかし、答えを知っている人のために、ここでも質問します。

最近、簡単なWebアプリを作成しました。合計2つのビューがあり、ユーザーは2つのビュー間を行ったり来たりできる必要があります。setViewメソッドでアプリのビューを変更できるのは自然なことのようです。リンクをクリックしてインデックスビューからショービューに切り替えると、すべてうまく機能します。ただし、リンクをクリックしてもインデックス表示に戻れません。「セレクター''でView#manageプロパティをtrueに設定してください」というエラーメッセージが表示されるだけです。古いビューオブジェクトは別のビューに切り替えるときに破棄されているはずなので、思ったとおりに機能しない場合を除いて、なぜこのエラーが発生するのでしょうか。

以下は私のコーヒースクリプトコードの抜粋です。MyApp.Routers.Home = Backbone.Router.extend(routes:'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ビューと同様のコードがあります。

ビューをキャッシュすることもおそらく解決策です。ビューオブジェクトの再作成が回避されるため、このアプローチはこの問題を回避します。しかし、私のアプリにはたくさんの写真があるので、アプリのビューが変わるたびにサーバーからデータを取得したいと思います。それが正しい道かどうかはわかりません。洞察を共有していただきありがとうございます。

4

0 に答える 0