次のビューがあります。
ContactsApp.SettingsView = Backbone.Marionette.ItemView.extend({
initialize: function () {
this.bindTo(this.model, "change", this.modelChanged);
},
modelChanged: function (model, value) {
console.log(this.model.get('search'));
this.render();
},
events: {
'click .clickable': 'GoTo',
'keyup input[type=text]': 'search'
},
GoTo: function (ev) {
var dest = $(ev.target).data('dest');
if (dest == undefined) { return; }
if (dest === "next") { this.model.nextPage(); return; }
if (dest === "prev") { this.model.previousPage(); return; }
this.model.set({ page: dest });
},
search : function (ev) {
console.log('search');
},
template: "#additional-stuff-template"
});
そして私のテンプレート:
<script type="text/template" id="additional-stuff-template">
<span class="clickable" data-dest="1">First</span>
<span class="clickable" data-dest="prev">Previous</span>
<input type="text" value="{{ page }}" size="3" /> of {{ pages}}
<span class="clickable" data-dest="next">Next</span>
<span class="clickable" data-dest="{{ pages }}">Last</span>
Search : <input type="text" class="search" value="{{ search }}" size="15" />
</script>
イベントは発生しません。私が変われば
events: {
'click .clickable': 'GoTo',
'keyup input[type=text]': 'search'
},
に
events: {
'click': 'GoTo',
'keyup': 'search'
},
クリック イベントを実行することはできますが、スパンだけではありません (アンカー タグにも同じ問題がありました。
私はこれが私がやっている愚かなことだと知っています...