L'unico modo per renderli osservabili consiste nel delegarli in proprietà osservabili.
var yourViewModel = {
width: ko.observable(),
height: ko.observable()
};
var $window = $(window);
$window.resize(function() {
yourViewModel.width($window.width());
yourViewModel.height($window.height());
});
Non capisco davvero la tua seconda domanda. Non potresti semplicemente usare il CSS per questo?
EDIT
Seconda domanda. Una possibilità sarebbe scrivere un gestore di binding per farlo (non testato).
ko.bindingHandlers.center {
init: function (element) {
var $el = $(element);
$el.css({
left: "50%",
position: "absolute",
marginLeft: ($el.width()/2) + 'px'
});
}
}
Il 50% e margin-left è un ottimo modo per centrare le cose in scenari poiché funziona automatcially anche se la finestra viene ridimensionata. Ovviamente se i div stessi ridimensionano è necessario ricalcolare il margine sinistro, questo potrebbe sempre essere associato a un valore sul viewmodel. Spero che questo aiuti.
Grazie, trovare un modo migliore: 'ko.bindingHandlers.winsize = { init: function (elemento, valueAccessor) { $ (window) .resize (function() {var = valore valueAccessor(); valore ({width: $ (window) .width(), height: $ (window) .height()}); }); } – Dean
La seconda domanda, ad es .: utilizzando jquery per aggiungere diversi elementi div (posizione assoluta, larghezza e altezza diverse) al documento, allo stesso tempo tenerli al centro della finestra del browser (quindi, è necessario calcolare il css left e css height di ogni div in modo dinamico), inoltre, se si verifica un evento di ridimensionamento della finestra, ricalcolo ... ancora cercando. – Dean
@Dean - OK vedi modifica. – madcapnmckay