2012-06-01 14 views
6

Cercando di fare qualcosa per la finestra del browser:Come fare dimensione della finestra osservabile utilizzando knockout

  1. E 'possibile effettuare la dimensione della finestra ($(window).width(), $(window).height()) osservabile utilizzando Knockout?
  2. Come mantenere FUTURO Elementi aggiunti al centro della finestra? C'è qualcosa che può essere fatto usando il metodo jquery jquery o a eliminazione diretta?

Qualsiasi consiglio apprezzato!

risposta

10

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.

+2

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

+0

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

+0

@Dean - OK vedi modifica. – madcapnmckay

Problemi correlati