导出对象的属性

时间:2013-03-27 10:23:57

标签: google-closure-compiler google-closure

如何导出对象的方法以在HTML页面中进行外部调用。

JavaScript代码:

my.namespace.FeedbackController = Class.create();
Object.extend(my.namespace.FeedbackController.prototype, {
 initialize:function(fid, fitem){
  this.fid = fid,
  this.feedback_item = fitem;
 },
 link_click : function(fstate) {
  alert(fstate);
 }
});
goog.exportSymbol('my.namespace.FeedbackController', my.namespace.FeedbackController);
goog.exportProperty(my.namespace.FeedbackController, 'link_click', my.namespace.FeedbackController.link_click);

在页面上,有多个人可以提供反馈。 HTML代码:

<script type="text/javascript">
  feedback_handlers = new Array();
  feedback_handlers[16] = new my.namespace.FeedbackController(16, 'useful');
</script>
<a href="javascript:feedback_handlers['16'].link_click('useful');">Useful</a>

当我点击'有用'链接时,我得到TypeError:feedback_handlers ['16']。link_click不是函数。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

link_click是一种原型方法。

尝试:

goog.exportProperty(my.namespace.FeedbackController.prototype, 'link_click', my.namespace.FeedbackController.prototype.link_click);

请参阅 https://code.google.com/p/closure-library/source/browse/closure/goog/base.js#1538

答案 1 :(得分:1)

Closure-compiler无法识别扩展函数原型Object.extend的方式。您需要使用直接原型分配:

my.namespace.FeedbackController.prototype.initialize = function() ...

如果使用详细警告进行编译,则应收到有关未定义属性的警告。