2012-06-01 20 views
6

Próbuje zrobić coś o okna przeglądarki:Jak rozmiar okna zaobserwować przy użyciu nokaut

  1. Czy to możliwe, aby rozmiar okna ($(window).width(), $(window).height()) do zaobserwowania przy użyciu Knockout?
  2. Jak zachować PRZYSZŁOŚĆ Dodano elementy na środku okna? Czy jest coś, co można zrobić za pomocą metody jQuery na żywo lub niestandardowych powiązań nokautów ?

Każda sugestia doceniona!

Odpowiedz

10

Jedynym sposobem na ich obserwację jest wprowadzenie ich do obserwowalnych właściwości.

var yourViewModel = { 
    width: ko.observable(), 
    height: ko.observable() 
}; 

var $window = $(window); 
$window.resize(function() { 
    yourViewModel.width($window.width()); 
    yourViewModel.height($window.height()); 
}); 

Naprawdę nie rozumiem twojego drugiego pytania. Nie możesz po prostu użyć css do tego?

EDIT

drugie pytanie. Jedną z możliwości byłoby napisanie programu do obsługi powiązania (untested).

ko.bindingHandlers.center { 
    init: function (element) { 
     var $el = $(element); 

     $el.css({ 
      left: "50%", 
      position: "absolute", 
      marginLeft: ($el.width()/2) + 'px' 
     }); 
    } 
} 

50% i margin-left to świetny sposób, aby wyśrodkować rzeczy w swoich scenariuszach ponieważ automatcially działa nawet wtedy, gdy okno jest zmieniany. Oczywiście, jeśli rozmiar divy się zmienia, musisz ponownie obliczyć lewy margines, to zawsze może być powiązane z wartością w viewmodelu. Mam nadzieję, że to pomoże.

+2

Dzięki znaleźć lepszy sposób: 'ko.bindingHandlers.winsize = { startowych: function (element, valueAccessor) { $ (okno) .resize (function() {var value = valueAccessor(); wartości ({szerokość: $ (okno) .width(), wysokość: $ (okno) .height()}); }); } ' – Dean

+0

Drugie pytanie, np .: użycie jquery w celu dodania kilku elementów div (pozycja absolutna, inna szerokość i wysokość) do dokumentu, jednocześnie zachowując je w środku okna przeglądarki (tak, trzeba obliczyć css lewa i wysokość css każdego dynamicznego div), dalej, jeśli zdarzenie zmiany rozmiaru okna się dzieje, ponowne obliczenie ... wciąż próbuje. – Dean

+0

@Dean - OK patrz edycja. – madcapnmckay

Powiązane problemy