【问题标题】:why is element undefined in CFC?为什么 CFC 中的元素未定义?
【发布时间】:2014-08-14 18:23:39
【问题描述】:

我有一个相当简单的 CFC,它有一组属性,然后是一些与这些属性相关的基本功能。除了作为数组的属性之外,一切似乎都工作正常......

property name="tags" type="array";

这是属性的简单声明。但是,当我尝试在其中一个成员函数中对其执行操作时,出现错误...

public void function addTag(thisTag) {
    var local.tags = this.getTags();
    if (thisTag.isObjectValid()) {          
        *ArrayAppend(local.tags,arguments.thisTag);*
        this.setTags(local.tags);
    }
}

带星号的行是我出错的地方(星号不在代码中)

Element TAGS is undefined in LOCAL.

我做错了什么?

附加信息:

  1. accessors="true" 在组件声明中设置
  2. isObjectValid 是另一个 CFC 中的自定义函数 - 它已经过测试并且可以工作

【问题讨论】:

  • 在第二行之后放一个 writedump(local) 看看你得到了什么。
  • 和你的问题无关,但是var和local的组合不是多余的吗?
  • 我得到同样的错误,“元素标签在本地未定义”,但现在它发生在转储行而不是上面的星号行。
  • 是的,它是多余的。后来我添加了本地范围,试图解决这个问题并忘记删除var。解决问题后我会清理。
  • writedump(local) 不会抛出错误。如果有的话,它将返回一个空结构。无论如何,writedump(this.getTags()) 会发生什么?注意到趋势了吗?如有疑问,请查看您的数据。

标签: coldfusion cfc cfml coldfusion-11


【解决方案1】:

您尚未为 tags 属性设置默认值,因此它为 null 或未定义。您需要给它一个默认值,或者在尝试访问它之前在构造函数中分配一个值。或者,您可以照原样继续,但您需要执行 isNull(local.tags) 来检查它是否已初始化。

【讨论】:

  • 这就是问题所在。如果类型是数组,当默认值必须是常量时,如何给它一个默认值?
  • 我最终创建了一个 Init() 函数并将 ArrayNew(1) 设置为数组属性。不过,似乎应该有一种方法可以默认,而不必在 Init 中进行。
  • 是的,就是这样做的。我不明白为什么属性默认值需要是一个常数。也许在 Adob​​e 错误库中有一张票。如果没有,您可以添加一个:)
猜你喜欢
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多