私がしたいこと:
内部にオプション タグを含む選択ドロップダウンをレンダリングし、ユーザーがドロップダウンでオプションを選択すると、新しく選択されたモデルを取得し、それを処理します。
問題:
CompositeView を介して呼び出された ItemView で変更イベントをトリガーするのに苦労しています。
何らかの理由で CompositeView:change (ログ: ホーリー モーゼス) がトリガーされていますが、選択したモデルが得られないため、あまり役に立ちません。
たくさんのことを試しましたが、実際には何も機能しませんでした。
どんな助けでも大歓迎です!
コード:
Configurator.module('Views.Ringsizes', function(Views, Configurator, Backbone, Marionette, $, _) {
Views.DropdownItem = Marionette.ItemView.extend({
tagName: 'option',
template: "#dropdown-item",
modelEvents: {
'change': 'modelChanged'
},
onRender: function(){
console.log('tnt');
this.$el = this.$el.children();
this.setElement(this.$el);
},
modelChanged: function(model) {
console.log("holy mary");
}
});
Views.DropdownView = Marionette.CompositeView.extend({
template: "#dropdown-collection",
className: 'configurator-ringsizes-chooser',
itemView: Views.DropdownItem,
itemViewContainer: '.product_detail_ring_sizes',
events: {
"change": "modelChanged"
},
initialEvents: function(){},
initialize: function(){
console.log(this.model);
this.collection = new Backbone.Collection(this.model.getRingsizes());
},
modelChanged: function(model) {
console.log("holy moses");
}
});
Views.List = Marionette.CollectionView.extend({
className: 'configurator-ringsizes',
itemView: Views.DropdownView
});
});
テンプレートコード: (必要な場合)
<script type="text/template" id="dropdown-item">
<option value="<@- code @>" <@ if(current) { @> selected="selected" <@}@> ><@- name @> </option>
</script>
<script type="text/template" id="dropdown-collection">
<div class="accordionContent accordionContent_ringsizes">
<div class="configurator-ringsizes-chooser-ringsizes-region">
<select class="product_detail_ring_sizes"></select>
</div>
</div>
</script>