5

バックボーンビューを再レンダリングするとき、画像やGoogleマップなどの再レンダリングをスキップする良い方法は何ですか?私の写真と地図のビューは、ビューが再レンダリングされるたびに非常にひどくちらつく傾向があります(これは非常に頻繁です)。特に画像の場合、テンプレートエンジンがレイアウトを最初からレイアウトしている場合があります。これにより、画像タグはサーバーまたはキャッシュからビットマップを再度フェッチします。

もちろん、ビューはレイアウトにとらわれないままにしておきたいので、技術的には、画像を表示することを知らないはずですよね?

4

2 に答える 2

9

「ビューはテンプレートに依存しない」というあなたの仮定と矛盾する解決策を提供します。

render()モデルで何かが変更されたときに電話をかけると、特にテンプレートが大きい場合は、ブラウザでこれが点滅します。

私の推奨事項はrender、ビューが初めて視覚化されたときに1回だけ発生するupdateビューと、具体的なモデル属性にリンクされたビューの小さな部分の更新を担当するいくつかのヘルパーメソッドを分離することです。

例えば:

// code simplified and not tested
var MyView = Backbone.View.extend({
  initialize: function(){
    this.model.on( "change:title", this.updateTitle, this );
    this.model.on( "change:description", this.updateDescription, this );
    // ... more change:XXX
  },

  render: function(){
    this.$el.html( this.template( this.model.toJSON() ) );
  },

  updateTitle: function(){
    this.$el.find( ".title" ).html( this.model.get( "title" ) );
  },

  updateDescription: function(){
    this.$el.find( ".description" ).html( this.model.get( "description" ) );
  },

  // ... more updateXXX()
})
于 2012-06-13T09:40:33.747 に答える
1

最良の結果を得るには、メディアを含むHTMLを再レンダリングしたくないので、変更されるコンテンツに対してよりターゲットを絞ったビューを使用することをお勧めします。そうすれば、変更されないコンテンツでビューを再レンダリングする必要がなくなります。 't。

于 2012-06-13T09:38:19.817 に答える