“渲染一次”;同时“;属性更改
Render once on "simultaneous" attribute change
在我的Backbone.js应用程序中,我有以下模型和视图:
var Operation = Backbone.Model.extend({
defaults: function() {
return {
sign: '-',
value: '0000',
index: 0
}
}
});
var operation = new Operation();
var OperationView = Backbone.View.extend({
el: '#operation',
initialize: function() {
this.listenTo(this.model, 'change:sign change:value', this.renderOperation);
this.renderOperation();
},
renderOperation: function() {
console.log('rendered once');
this.$el.html(this.model.get('sign') + this.model.get('value'));
}
});
var operationView = new OperationView({ model: operation });
视图监视的位置
'change:sign change:value'
(…每当"符号"或"值"发生变化时更新视图。)
当我使用时
// Test
setInterval(function() {
var newValue = parseInt(operation.get('value'), 10);
newValue += 500;
newValue += '';
operation.set({ 'sign': '+', 'value': newValue });
}, 1000);
第一次执行setInterval时,视图会更新两次("rendered once"为console.log两次)。
然而,由于我"同时"设置符号和值,我宁愿我的视图只更新一次。
问题:在Backbone.js中,是否有任何方法可以列出模型的多个(特定)属性中的更改,并且如果同时设置了多个属性,则只渲染视图一次?
您的视图正在侦听两个'change:sign change:value',
因此,当该属性发生更改时,每个属性更改都会触发一次事件。
您可以始终侦听模型上的change
事件。如果模型属性在同一集合散列中改变,则其将仅触发单个CCD_。
this.listenTo(this.model, 'change', this.renderOperation);
检查Fiddle-更改事件
但是,如果您仍然想侦听属性上的多个更改事件,并且只触发一次事件。您可能会在设置值时使用破解方法传递{silent: true}
,并触发属性更改事件。这有点古怪。
var Operation = Backbone.Model.extend({
defaults: function () {
return {
sign: '-',
value: '0000',
index: 0
}
}
});
var operation = new Operation();
var OperationView = Backbone.View.extend({
el: '#operation',
initialize: function () {
this.listenTo(this.model, 'change:sign change:value', this.renderOperation);
this.renderOperation();
},
renderOperation: function () {
console.log('rendered once');
this.$el.html(this.model.get('sign') + this.model.get('value'));
}
});
var operationView = new OperationView({
model: operation
});
setInterval(function() {
var newValue = parseInt(operation.get('value'), 10);
newValue += 500;
newValue += '';
operation.set({ 'sign': '+', 'value': newValue }, {silent: true});
operation.trigger('change:sign')
}, 1000);
抑制事件并触发Fiddle
相关文章:
- 如何设置类型化对象的属性,同时保留它's类型
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- 同时打印对象的属性和值Javascript
- BackboneJS重新排列集合中模型的最佳方式,同时为每个模型维护0索引的有序属性
- 是否可以同时使用Leaflet.js中的中心和边界属性
- 无法让 JavaScript 与 readOnly 属性同时设置背景颜色
- 使用 getter/setter 覆盖 javascript 属性,同时仍访问底层属性
- “渲染一次”;同时“;属性更改
- 如何将name属性添加到<td>标记,同时动态添加行
- Knockout-如何同时设置子项和父项的计算属性
- 复杂的Mongo查询,同时检查多个属性
- 使用HTML JavaScript属性“;关于“某人”;或者在Script上为所有元素同时添加一个Event Liste
- 同时使用“数据”和“数据”.和“;response"属性中的ajax调用
- mongoose.js:我如何从引用的子数组中删除一个属性,同时使用填充和使用其中一个子数组字段作为过滤器
- 同时为现有对象添加属性
- 序列化嵌套javascript对象,同时删除某些属性
- 为什么JS允许对象属性同时“引号”?和引用?有区别吗?
- 如何替换
并同时删除href属性 - 为什么当输入的name属性相同时,我的函数返回的不是函数
- 无法获取属性值'appendChild':对象为空或未定义"同时追加脚本到IE