2

iPad 用の Web アプリケーションを作成していますが、最近パフォーマンスの問題が発生しています。左側にニュースのリストがあり、右側に 1 つのニュース ビューがあります。ニュースをタップすると、右側に完全なニュースが表示されます。

現時点では、ニュースがタップされるたびに新しいビューを生成しています。現在、ビュー テンプレートはニュースごとに同じままであり、毎回新しいビューを生成するのではなく、選択したニュース コンテンツで右側のビューを更新するだけでパフォーマンスが向上するかどうか疑問に思っています。

もしそうなら、新しいモデルデータまたは単純なjQueryでビューを更新するバックボーンの方法はありますか?

4

2 に答える 2

1

パフォーマンスに関する限り、パフォーマンスの一部を更新するだけで十分かどうかは、ビューがどれほど複雑で、どれだけ変化しているかに依存する可能性があります。

つまり、右側の新しいアイテムに対して1つのビューを作成し、そのモデルを交換するtriggerか、ビューのメソッドをchange event呼び出すことができます。refresh何かのようなもの

var NewsItemView = BackBone.View.extend({

   initialize: function() {
     this.model.bind('change', this.refresh, this);
   },

   refresh: function () {
     this.$el.find('#partIWantToUpdate').html(this.model.get('someField'));
   }
})

そして、新しいビューを作成するのではなく、モデルを交換するだけです

newItemView.model = newsModel;
newsModel.trigger('change');

または、changeイベントへのバインドを忘れて、メソッドを直接呼び出すだけです。

newItemView.refresh();

もう1つのオプションは、ニュースアイテムごとにビューを作成し、そのビューをコレクションのビューにキャッシュして、ニュースアイテムがタップされるたびに(削除するのではなく、バインドされたイベントも削除することがdetach重要です)、現在のビューを(実際には現在のビューの)そして新しく選択されたモデルのビューを添付します。detachremoveDOMel

于 2012-08-29T14:34:51.980 に答える
0

次のような単純なものである可能性があります。

// code no tested
var NewsView = Backbone.View.extend({
  changeCollection: function( collection ){
    this.collection = collection;
    this.render();
  }
});
于 2012-08-29T10:07:14.397 に答える