Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 如何在goog.ui.tree.Basenode上调用EventType?_Events_Onclick_Google Closure_Google Closure Library - Fatal编程技术网

Events 如何在goog.ui.tree.Basenode上调用EventType?

Events 如何在goog.ui.tree.Basenode上调用EventType?,events,onclick,google-closure,google-closure-library,Events,Onclick,Google Closure,Google Closure Library,我正在使用谷歌闭包库构建一棵树。现在我希望节点在一个鼠标点击上展开,但我似乎无法让它工作 我尝试调用goog.ui.component.EventType.SELECT,但它不起作用 在我的树组件类中,我添加了以下事件: goog.events.listen(item, [goog.ui.Component.EventType.SELECT, goog.ui.tree.BaseNode.EventType.EXPAND], this.dispatchEvent, false, this); 在

我正在使用谷歌闭包库构建一棵树。现在我希望节点在一个鼠标点击上展开,但我似乎无法让它工作

我尝试调用goog.ui.component.EventType.SELECT,但它不起作用

在我的树组件类中,我添加了以下事件:

goog.events.listen(item, [goog.ui.Component.EventType.SELECT, goog.ui.tree.BaseNode.EventType.EXPAND], this.dispatchEvent, false, this);
在我的类中调用我添加的函数:

goog.events.listen(this._tree, [goog.ui.Component.EventType.SELECT, goog.ui.tree.BaseNode.EventType.EXPAND], this.treeClick, false, this)
关于如何通过单击扩展节点的任何建议?

我发现这会破坏任何单击事件:

/**
 * Handles a click event.
 * @param {!goog.events.BrowserEvent} e The browser event.
 * @protected
 * @suppress {underscore}
 */
goog.ui.tree.BaseNode.prototype.onClick_ = goog.events.Event.preventDefault;
将此代码添加到goog/demos/tree/demo.html时:

   goog.ui.tree.BaseNode.prototype.onClick_ = function (e) {
       var qq = this.expanded_?this.collapse():this.expand();
   };
一次单击即可展开和收拢树控件

尝试扩展goog.ui.tree.TreeControl并重写createNode以返回重写onClick的自定义goog.ui.tree.TreeNode,但如果不出错,则无法执行此操作。理论上,您可以创建自定义的TreeControl,只需单击一下即可展开和折叠

如果您想支持不可折叠的内容和其他功能,我想您必须触发某种事件,而不是仅仅扩展或调用树节点

[更新]

经过一些修改,我通过对TreeControl和TreeNode子类化使其工作,并将以下代码添加到goog/demos/tree/demo.html

/**
 * This creates a myTreeControl object. A tree control provides a way to
 * view a hierarchical set of data.
 * @param {string} html The HTML content of the node label.
 * @param {Object=} opt_config The configuration for the tree. See
 *    goog.ui.tree.TreeControl.defaultConfig. If not specified, a default config
 *    will be used.
 * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
 * @constructor
 * @extends {goog.ui.tree.BaseNode}
 */
  var myTreeControl = function (html, opt_config, opt_domHelper) {
      goog.ui.tree.TreeControl.call(this, html, opt_config, opt_domHelper);
  };
  goog.inherits(myTreeControl, goog.ui.tree.TreeControl);
  /**
   * Creates a new myTreeNode using the same config as the root.
   * myTreeNode responds on single clicks
   * @param {string} html The html content of the node label.
   * @return {goog.ui.tree.TreeNode} The new item.
   * @override
   */
  myTreeControl.prototype.createNode = function (html) {
      return new myTreeNode(html || '', this.getConfig(),
          this.getDomHelper());
  };
/**
 * A single node in the myTreeControl.
 * @param {string} html The html content of the node label.
 * @param {Object=} opt_config The configuration for the tree. See
 *    goog.ui.tree.TreeControl.defaultConfig. If not specified, a default config
 *    will be used.
 * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
 * @constructor
 * @extends {goog.ui.tree.BaseNode}
 */
 var myTreeNode = function (html, opt_config, opt_domHelper) {
      goog.ui.tree.TreeNode.call(this,html, opt_config, opt_domHelper)
  }
  goog.inherits(myTreeNode, goog.ui.tree.TreeNode);
  /**
   * Handles a click event.
   * @param {!goog.events.BrowserEvent} e The browser event.
   * @override
   */
  myTreeNode.prototype.onClick_ = function (e) {
      goog.base(this, "onClick_", e);
      this.onDoubleClick_(e);
  };
已更改树变量的创建:

tree = new myTreeControl('root', treeConfig);
只需点击一次就可以工作,并且没有注意到任何其他损坏的东西。我添加了注释,这样编译起来更容易。您可以使用
goog.provide
将声明放在一个单独的文件中

太糟糕了,TreeControl的handleMouseEvent_uuu是,或者您只需重写该事件,但如果不更改TreeControl源或获取编译错误/警告,则无法执行此操作。好的,杰默