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.
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
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
@Dean - OK patrz edycja. – madcapnmckay