如何在扩展器中访问查看模式

Posted

技术标签:

【中文标题】如何在扩展器中访问查看模式【英文标题】:How to access view mode in an extender 【发布时间】:2019-10-01 17:10:58 【问题描述】:

我想听一个名为 isDesktop 的属性,并在它更改时触发显示/隐藏选项面板。问题出在扩展器中,我唯一可以访问的部分是目标、选项和 this,它们都不能访问显示/隐藏方法所在的视图模型。

这在我切换到使用 Require 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 ),

我认为有一种方法可以访问从扩展器调用扩展器的范围。如果不是,那么可以尝试其他哪些解决方案?

【问题讨论】:

不要为参数“option”传递值“true”,因为无论如何似乎都不会使用它,而是传递对您的视图模型的引用。 【参考方案1】:

这个例子可能对你有所帮助吗?我添加了视图模型,但如果传递它真的是你想要的,我会争论吗?

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>

【讨论】:

以上是关于如何在扩展器中访问查看模式的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮单击事件中的模式弹出扩展器中的iframe中加载页面?

手动删除了 Joomla 组件,但标题仍显示在扩展管理器中

扩展功能上下文的方法?例如在装饰器中

如何在查看器中列出 navisworks 文件的级别?

如何向我的 Forge 查看器添加热图或 Fader 扩展?

Autodesk Forge 查看器 - GLTF 扩展