Единственный способ сделать их наблюдаемыми - проксировать их в наблюдаемые свойства.
var yourViewModel = {
width: ko.observable(),
height: ko.observable()
};
var $window = $(window);
$window.resize(function() {
yourViewModel.width($window.width());
yourViewModel.height($window.height());
});
Я не совсем понимаю ваш второй вопрос. Не могли бы вы просто использовать css для этого?
EDIT
Второй вопрос. Одна из возможностей - написать обработчик привязки для этого (непроверенный).
ko.bindingHandlers.center {
init: function (element) {
var $el = $(element);
$el.css({
left: "50%",
position: "absolute",
marginLeft: ($el.width()/2) + 'px'
});
}
}
50% -ный и маржа налево является отличным способом для центрирования вещи в ваших сценариях, так как он automatcially работает, даже если окно изменяет размер. Очевидно, что если сами размеры divs изменяются, вам нужно пересчитать левое поле, это всегда может быть привязано к значению на viewmodel. Надеюсь, это поможет.
Спасибо, найти лучший способ: 'ko.bindingHandlers.winsize = { INIT: функция (элемент, valueAccessor) { $ (окно) .resize (функция() { значения вара = valueAccessor(); значения ({width: $ (window) .width(), height: $ (window) .height()}); }); } ' – Dean
Второй вопрос, например: использование jquery для добавления нескольких элементов div (абсолютное положение, разная ширина и высота) в документ, в то же время сохранить их в центре окна браузера (так что нужно вычислить css левая и css высота каждого div динамически), еще больше, если произойдет событие изменения размера окна, пересчитайте ... все еще пытайтесь. – Dean
@Dean - OK см. Редактирование. – madcapnmckay