私は他の場所でこの質問をしました。しかし、答えを知っている人のために、ここでも質問します。
最近、簡単な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ビューと同様のコードがあります。
ビューをキャッシュすることもおそらく解決策です。ビューオブジェクトの再作成が回避されるため、このアプローチはこの問題を回避します。しかし、私のアプリにはたくさんの写真があるので、アプリのビューが変わるたびにサーバーからデータを取得したいと思います。それが正しい道かどうかはわかりません。洞察を共有していただきありがとうございます。