如何跟踪 Marionette.LayoutView 中输入的变化
How to track change on an input in a Marionette.LayoutView
我目前正在尝试让 LayoutView 中的输入字段跟踪它何时发生变化。
我的代码如下
https://jsfiddle.net/nyTZU/10/
<div id="view-goes-here">
<div id="listing_filter">
Price: <input type="text" id="listing_filter_price" />
Beds: <input type="text" id="listing_filter_bedroom" />
Baths: <input type="text" id="listing_filter_bathroom" />
</div>
var V = Backbone.LayoutView.extend({
el: '#listing_filter',
events: {
'change input': 'updateFilter'
},
updateFilter: function() {
alert('hey');
}
});
var v = new V;
请注意,当更改发生时,它什么都不做,即不触发事件。
我如何在 backbone/marionette 中实现此目标??
您需要扩展 Backbone.Marionette.LayoutView
,而不是 Backbone.LayoutView
。如果您扩展适当的库,您的代码可以正常工作。
更正代码 - JSFiddle。
另外值得注意的是,在您取消输入焦点之前,更改事件不会触发。
我更新了你的fiddle。事件绑定本质上没有任何问题。您所要做的只是 .extend()
一个 Marionette.LayoutView
,而不是 Backbone.LayoutView
.
在我的 fiddle 中,我决定使用模板填充 el
,而不是通过指定 el
,但您的方法确实没有错。
考虑到以上几点,您的新代码将如下所示
模板
<script type="text/template" id="listing_filter">
<p>
Price: <input type="text" id="listing_filter_price" />
Beds: <input type="text" id="listing_filter_bedroom" />
Baths: <input type="text" id="listing_filter_bathroom" />
</p>
</script>
<div id="view-goes-here">
</div>
代码
var V = Marionette.LayoutView.extend({
template: '#listing_filter',
events: {
'change input': 'updateFilter'
},
updateFilter: function() {
alert('hey');
}
});
var v = new V;
v.render();
$('#view-goes-here').append(v.el);
我目前正在尝试让 LayoutView 中的输入字段跟踪它何时发生变化。
我的代码如下
https://jsfiddle.net/nyTZU/10/
<div id="view-goes-here">
<div id="listing_filter">
Price: <input type="text" id="listing_filter_price" />
Beds: <input type="text" id="listing_filter_bedroom" />
Baths: <input type="text" id="listing_filter_bathroom" />
</div>
var V = Backbone.LayoutView.extend({
el: '#listing_filter',
events: {
'change input': 'updateFilter'
},
updateFilter: function() {
alert('hey');
}
});
var v = new V;
请注意,当更改发生时,它什么都不做,即不触发事件。
我如何在 backbone/marionette 中实现此目标??
您需要扩展 Backbone.Marionette.LayoutView
,而不是 Backbone.LayoutView
。如果您扩展适当的库,您的代码可以正常工作。
更正代码 - JSFiddle。
另外值得注意的是,在您取消输入焦点之前,更改事件不会触发。
我更新了你的fiddle。事件绑定本质上没有任何问题。您所要做的只是 .extend()
一个 Marionette.LayoutView
,而不是 Backbone.LayoutView
.
在我的 fiddle 中,我决定使用模板填充 el
,而不是通过指定 el
,但您的方法确实没有错。
考虑到以上几点,您的新代码将如下所示
模板
<script type="text/template" id="listing_filter">
<p>
Price: <input type="text" id="listing_filter_price" />
Beds: <input type="text" id="listing_filter_bedroom" />
Baths: <input type="text" id="listing_filter_bathroom" />
</p>
</script>
<div id="view-goes-here">
</div>
代码
var V = Marionette.LayoutView.extend({
template: '#listing_filter',
events: {
'change input': 'updateFilter'
},
updateFilter: function() {
alert('hey');
}
});
var v = new V;
v.render();
$('#view-goes-here').append(v.el);