1

Backbone.Marionette の CompositeView を使用しています。新しいモデルをコレクションのインデックス 0 に挿入し、それをコンポジットの最初のビューとして表示したいと考えています。

要素を挿入する次のコードがあります。

PlansApp.Plans.collection.unshift new PlansApp.Plan data

問題は、 CompositeView がコレクションに新しく挿入されたアイテムのインデックスを無視することです。

Backbone.Marionette では、appendHtml メソッドは次のようになります。

  appendHtml: function(collectionView, itemView, index){
    collectionView.$el.append(itemView.el);
  },

index 引数は使用されません。

新しく挿入されたビューは、常にコンポジットの最後に配置されます。

位置0に表示するにはどうすればよいですか?

4

2 に答える 2

3

これは、ソートされたコレクションを直接サポートする際に特定された多数のエッジ ケースのため、設計によるものです。

index開発者がアプリケーションにサポートを個別に追加できるように、パラメーターが追加されました。これを行う方法の例を示す wiki ページがあります: https://github.com/derickbailey/backbone.marionette/wiki/Adding-support-for-sorted-collections


MySortedView = Backbone.Marionette.CompositeView.extend({
  // ...,

  appendHtml: function(collectionView, itemView, index){
    var childrenContainer = $(collectionView.childrenContainer || collectionView.el);
    var children = childrenContainer.children();
    if (children.size() === index) {
      childrenContainer.append(itemView.el);
    } else {
      childrenContainer.children().eq(index).before(itemView.el);
    }
  }

});
于 2012-07-11T13:59:08.220 に答える