0

バックボーン リレーショナルを使用してモデル リレーションシップを設定しています。これにより、Itemは に属しColumnます。項目を列に追加することはうまくいきますが、古い列から項目を削除するために、項目の既存のビューを参照するにはどうすればよいですか? (したがって、アイテムは現在、列全体で複製されています。)

この JSFiddle - http://jsfiddle.net/geVPp/1を参照してください(ColumnView removeItemイベント ハンドラーにコードを実装する必要があると思いますが、間違っている可能性があります)。

(UI コントロールがまだないため、インスタンス化の例はスクリプトの最後にあります。)

フィドルからの ColumnView は次のとおりです。

var ColumnView = Backbone.View.extend({
className: 'column',
tagName: 'div',
template: Handlebars.compile($('#column-template').html()),
initialize: function() {
  _.bindAll(this, 'render', 'renderItem', 'removeItem');
  this.model.bind('change', this.render);
  this.model.bind('reset', this.render);
  this.model.bind('add:items', this.renderItem);
  this.model.bind('remove:items', this.removeItem);
},
render: function() {
  return $(this.el).html(this.template(this.model.toJSON()));
},
renderItem: function(item) {
  var itemView = new ItemView({model: item});
  this.$('.items').append($(itemView.render()));
},
removeItem: function(item) {
  // @todo -- How do I reference the item model's view, in order to remove the DOM element?
}
});
4

1 に答える 1

0

残念ながら、Backbone には組み込みの方法がありません。子ビュー (およびそれらがマップされるモデル) を手動で追跡する必要があります。

Backbone.Marionetteには、これを自動化できる CollectionView クラスがあります。または、 UpdatingCollectionViewと同様に独自にロールすることもできます。

迅速な修正が必要な場合は、ビューへの参照をモデル オブジェクトの変数として保持できますが、同じモデルの複数のビューを表示できなくなるため、これは好ましくありません。

于 2012-07-17T23:59:40.330 に答える