为什么我的goog.ui.Component中没有定义setModel()`?

时间:2012-07-28 03:00:30

标签: google-closure google-closure-library

我创建了goog.ui.Component的子类:

/**
 * Renders the bottom pane.
 * @param {!myapp.Entity} entity An entity.
 * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
 * @constructor
 * @extends {goog.ui.Component}
 */
myapp.BottomPane = function(entity, opt_domHelper) {
  goog.base(this, opt_domHelper);
  this.setModel(entity);
}
goog.inherits(myapp.BottomPane, goog.ui.Component);

但是,当我运行我的javascript时,Chrome控制台会记录Uncaught TypeError: Object #<Object> has no method 'setModel'。我设置了一个断点,并意识到我的myapp.BottomPane实例在原型链中缺少setModel方法。这很奇怪,因为文档指出所有组件都有这种方法:http://closure-library.googlecode.com/svn/docs/class_goog_ui_Component.html

为什么我的goog.ui.Component缺少setModel方法?我知道对goog.base(this, opt_domHelper);的调用是有效的,因为我的对象有一个DOM助手。

1 个答案:

答案 0 :(得分:2)

我可以通过执行构造函数Object #<Object> has no method 'setModel'而不使用myapp.BottomPane关键字来重现错误new

var bottomPane = myapp.BottomPane({id: 'my_id'}); // Results in error. 

确保使用new创建实例。

var bottomPane = new myapp.BottomPane({id: 'my_id'}); // Okay