Как получить доступ к режиму просмотра в экстендере - PullRequest
0 голосов
/ 14 мая 2019

Я хотел бы прослушать свойство isDesktop и при его изменении вызвать панель параметров отображения / скрытия.Проблема в экстендере. Единственные части, к которым я могу получить доступ, - это target, option, и это ни одна из них не обеспечивает доступ к модели представления, где расположены методы show / hide.

Это работало до того, как я переключился на использованиеТребуйте JS и компоненты, потому что он использовал глобальную область для доступа к этим вещам.Лучше не использовать глобальную область видимости, но она ограничивает доступ к необходимым свойствам.Я пытался связать это, но это только дает мне доступ к глобальному объекту окна, который не обеспечивает доступа.

  ko.extenders.responsive = function(target, option) {
    target.subscribe(function(isDesktop) {
      if (isDesktop) //showOptions()
      else //hideOptions()
    })
    return target
  }
//
  isDesktop: ko.observable(false).extend({ responsive: true }),

Я предполагаю, что есть способ получить доступ к области, которая вызвала экстендер из экстендера,Если нет, то какие еще решения можно попробовать?

1 Ответ

0 голосов
/ 15 мая 2019

Может ли этот пример помочь вам на вашем пути, возможно?Я добавил viewmodel, но буду спорить, действительно ли вы хотите передать его?

console.clear();

ko.extenders.responsive = function(valueAccessor, options) {
  valueAccessor.subscribe(function(value) {
    if (value)
    	options.target(options.message);
    else
    	options.target('');
  })
};

ko.applyBindings(() => {
	var self = this;
  self.desktopOptions = ko.observable('');
  self.isDesktop = ko.observable(false).extend({ responsive: { vm: self, target: self.desktopOptions, message: 'desktop is set' }});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<input type="checkbox" data-bind="checked: isDesktop" />
<span data-bind="text: desktopOptions"></span>
...