Как управлять расположением jQueryUI datepicker

Методы в Python очень, очень простая вещь, как только Вы поняли основы системы дескриптора. Вообразите следующий класс:

class C(object):
    def foo(self):
        pass

Теперь позволяют нам взглянуть на тот класс в оболочке:

>>> C.foo
<unbound method C.foo>
>>> C.__dict__['foo']
<function foo at 0x17d05b0>

, Как Вы видите, получаете ли Вы доступ эти foo атрибут на классе, Вы возвращаете несвязанный метод, однако в устройстве хранения данных класса (dict) существует функция. Почему это? Причина этого состоит в том, что класс Вашего класса реализует __getattribute__, который разрешает дескрипторы. Комплекс звуков, но не. C.foo примерно эквивалентно этому коду в том особом случае:

>>> C.__dict__['foo'].__get__(None, C)
<unbound method C.foo>

Поэтому функции имеют __get__ метод, который делает их дескрипторами. Если у Вас есть экземпляр класса, это - почти то же, просто это None является экземпляром класса:

>>> c = C()
>>> C.__dict__['foo'].__get__(c, C)
<bound method C.foo of <__main__.C object at 0x17bd4d0>>

Теперь, почему Python делает это? Поскольку объект метода связывает первый параметр функции к экземпляру класса. Это - то, куда сам прибывает из. Теперь иногда Вы не хотите, чтобы Ваш класс сделал функцию методом, это - то, где staticmethod играет роль:

 class C(object):
  @staticmethod
  def foo():
   pass

staticmethod декоратор обертывает Ваш класс и реализует макет __get__, который возвращает обернутую функцию как функцию и не как метод:

>>> C.__dict__['foo'].__get__(None, C)
<function foo at 0x17d0c30>

Hope, которая объясняет его.

35
задан Community 23 May 2017 в 12:10
поделиться

2 ответа

Публикуем это в надежде, что это поможет другим. По крайней мере, начиная с версии 1.8.1 datepicker, использование 'window.DP_jQuery.datepicker' больше не работает, потому что указатель (правильный термин?) Теперь назван с меткой времени его создания - так, например, теперь это будет 'window. DP_jQuery_1273700460448 '. Так что теперь, вместо того, чтобы использовать указатель на объект datepicker, обращайтесь к нему напрямую следующим образом:

$.extend($.datepicker,{_checkOffset:function(inst,offset,isFixed){return offset}});

Большое спасибо за ответ ниже за то, что я получил то, что мне было нужно.

65
ответ дан 27 November 2019 в 06:40
поделиться

Изменить: JaredC дал обновленный ответ для более поздних версий jQuery выше. Переключение принятого ответа на это.

Хорошо, это вопрос обезьяны, исправляющей функцию, которую она имеет, пытаясь всегда отображать в окне просмотра, поскольку нет возможности включить / отключить эту функцию. К счастью, он отделен и изолирован в одной функции, поэтому мы можем просто войти и переопределить его. Следующий код полностью отключает только эту функцию:

$.extend(window.DP_jQuery.datepicker,{_checkOffset:function(inst,offset,isFixed){return offset}});

_checkOffset вызывается при открытии и выполняет вычисления смещения и возвращает новое смещение, если в противном случае оно было бы вне порта просмотра. Это заменяет тело функции, чтобы просто пропустить исходное смещение. Затем вы можете использовать хак настройки beforeShow и / или класс css .ui-datepicker, чтобы разместить его где угодно.

10
ответ дан 27 November 2019 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: