You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polymer框架回调函数报错:this.callback is not a function求助

解决Polymer中回调函数调用报错Uncaught TypeError: this.callback is not a function的问题

这个错误的根源有两个,我来一步步帮你理清:

问题1:属性类型声明错误

你把callback的type设为了Object,但实际上它是一个函数类型的属性。虽然函数在JS里属于对象,但Polymer对属性类型的识别更精准,明确声明为Function类型,才能让Polymer正确处理它的初始化逻辑。

问题2:默认值的工厂函数使用错误

在Polymer中,对于Object、Array、Function这类引用类型的属性,设置value时必须使用工厂函数——也就是一个返回初始值的函数。如果直接把你的回调函数赋值给value,Polymer会把这个函数当作工厂函数执行,而你的函数没有return语句,返回值是undefined,最终导致this.callback变成了undefined,调用自然就报错了。

修正后的代码

把这两个问题修复后,代码应该是这样的:

Polymer({
  is: "parent-dom",
  properties: {
    people: {
      type: String,
      value: "df"
    },
    item: {
      type: String,
      value: "asdf",
      notify: true
    },
    callback: {
      type: Function, // 改为Function类型
      value: function() { // 工厂函数,返回我们的回调函数
        return function(index) { 
          console.log("Inside callback function"); 
        };
      }
    },
  },
  showTargetColorDialog: function(e) {
    this.callback("sadf");
  }
});

额外说明

如果你希望所有组件实例共享同一个回调函数(不需要每个实例都创建新的函数),也可以简化写法,既复用函数又符合Polymer的属性初始化规则:

callback: {
  type: Function,
  value: function() {
    return this._defaultCallback;
  }
},
_defaultCallback: function(index) {
  console.log("Inside callback function");
}

内容的提问来源于stack exchange,提问作者avinash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:48:57