Изменяемый размер пользовательского интерфейса JQuery Изменение размера события bind/on resize в Backbone View
У меня есть представление, НЕ размер окна, ни само окно, и когда оно изменяется, я хочу сравнить начальное и конечное значение изменения размера. Однако объект UI изменения размера JQ-UI включает в себя только предыдущее состояние, а не исходное, поэтому он захватывает изменения только на пиксели (хотя я думаю, что это потому, что я помещаю код в функцию изменения размера, а не в функцию завершения, но это это не настоящая проблема, так как я мог бы ее решить, как только я знаю, как вернуть переменную в само представление Backbone). Как я могу получить информацию из изменения размера обратно в представление магистрали? self
это глобальный window
объект и this
является результатом JQuery от селектора this.el
,
define([ ... ], function( ... ){
return Backbone.View.extend({
// I also tried to use the event handlers from backbone
events : {
'resize' : 'info'
},
initialize: function(options){
if (options) { ... }
this.el = '#measure-rep-c55';
}
//Dispatch listeners
...
//Binding
this.model.bind('change', _.bind(this.render, this));
$(this.el).on('resize', this.info); // Here I am trying to attach the listener here according the API
this.render();
},
info: function(){
console.log('in info')
},
render: function(){
... //template and other stuff
// JQ-UI resizable
$(this.el).resizable({
aspectRatio: true,
start: function(e, ui) {
// alert('resizing started');
},
resize: function( event, ui ) {
// in here self = window
// and this is the JQuery object
var oldW = ui.originalSize.width;
var newW = ui.size.width;
var deltaWidth = newW - oldW;
var deltaRatio = deltaWidth/oldW;
//HOW TO SEND info (in this case var deltaRatio) back to the backbone view
//I tried getting to the function info() so that I could access the View itself from there
},
stop: function(e, ui) {
// alert('resizing stopped');
}
});
},
});
});
2 ответа
Не создавайте прослушиватели из вызова с изменяемым размером, используйте хэш событий для прослушивания изменений, тогда у вас есть прямой доступ к вашему представлению из обратных вызовов.
events : {
'resizestart' : 'start',
'resizestop' : 'stop',
'resize' : 'resize'
},
render: function(){
... //template and other stuff
// JQ-UI resizable
this.$el.resizable({
aspectRatio: true
});
},
start: function(e, ui) {
// alert('resizing started');
},
resize: function( event, ui ) {
// this is the View
var oldW = ui.originalSize.width;
var newW = ui.size.width;
var deltaWidth = newW - oldW;
var deltaRatio = deltaWidth/oldW;
},
stop: function(e, ui) {
// alert('resizing stopped');
}
Вы можете использовать подчеркивание, чтобы связать представление "this" с функциями события, что даст вам доступ к самому представлению. Обычно я разделяю тела функций на их собственные функции, например:
render: function() {
...
this.$el.resizable({
aspectRatio: true,
start: _.bind(this.didStart, this),
resize: _.bind(this.didResize, this),
end: _.bind(this.didEnd, this)
});
},
didStart: function() {
...
},
didResize: function() {
...
},
didEnd: function() {
...
}