2012-06-01 1 views
6

Попытка сделать что-то в окне браузера:Как сделать размер окна наблюдаемым с помощью нокаута

  1. Можно ли сделать размер окна ($(window).width(), $(window).height()) наблюдаемую с помощью Нокаут?
  2. Как сохранить FUTURE Добавлено Элементы в центре окна? Есть ли что-то, что можно сделать с помощью метода jquery Live или пользовательских привязок нокаута?

Любое предложение оценено!

ответ

10

Единственный способ сделать их наблюдаемыми - проксировать их в наблюдаемые свойства.

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. Надеюсь, это поможет.

+2

Спасибо, найти лучший способ: 'ko.bindingHandlers.winsize = { INIT: функция (элемент, valueAccessor) { $ (окно) .resize (функция() { значения вара = valueAccessor(); значения ({width: $ (window) .width(), height: $ (window) .height()}); }); } ' – Dean

+0

Второй вопрос, например: использование jquery для добавления нескольких элементов div (абсолютное положение, разная ширина и высота) в документ, в то же время сохранить их в центре окна браузера (так что нужно вычислить css левая и css высота каждого div динамически), еще больше, если произойдет событие изменения размера окна, пересчитайте ... все еще пытайтесь. – Dean

+0

@Dean - OK см. Редактирование. – madcapnmckay