1

我制作了这样的自定义组件:

my.Cmp = function(opt_domHelper) {
    goog.ui.Component.call(this, opt_domHelper);

    ...

};
goog.inherits(my.Stamina, goog.ui.Component);

my.Cmp.prototype.createDom = function() {
    this.decorateInternal(this.dom_.createDom('div', 'сmp-inner-div'));
};

my.Cmp.prototype.decorateInternal = function(element) {
    my.Cmp.superClass_.decorateInternal.call(this, element);
    var elem = this.getElement();

    ...

};

my.Cmp.prototype.disposeInternal = function() {
    my.Stamina.superClass_.disposeInternal.call(this);

    ...

};

my.Cmp.prototype.enterDocument = function() {
   ...
}

my.Cmp.prototype.exitDocument = function() {
   ...
}

然后我在 html 文档中创建了一个实例

var cmp = new my.Cmp();
cmp.render(goog.dom.getElement('cmpContainerDivId'));

该组件使用键盘。它在鼠标单击后获得键盘焦点并且工作正常。我找不到如何在页面加载后给予 kb 焦点。我试图从 goog.ui.Control 继承 my.Cmp 组件并使用它的 setFocused 方法。getState() 显示焦点集中,但在单击鼠标或按下 Tab 键之前​​对 kb 键入没有反应。

4

1 回答 1

3

大概有以下几点:

my.Comp.prototype.setFocused = function(focused) {
    goog.base(this, 'setFocused', focused);
    if (focused) this.getElement().focus();
};

// ...

goog.events.listen(goog.dom.getWindow(), goog.events.EventType.LOAD, function() {
    // ... other init
    theCmp.setFocused(true);
});

setFocused()似乎主要用于簿记,类似isFocused()和类似的状态方法。

于 2012-04-23T03:24:24.383 回答