У меня есть два CFC, которые являются фасолью с функциями DAO. Я установил наследование, когда дочерний cfc расширяет родительский элемент.Унаследованный CFC не заполняется
Оба объекта имеют одинаковые конструкции; Функции: init, чтение и т. Д. И свойства: ID и т. Д.
Когда я создаю дочерний объект, я передаю идентификатор, который считывает данные, получая родительский идентификатор внешнего ключа для родителя, а затем Super.init () вызывается с соответствующими параметрами.
Мои неожиданные результаты: Идентификатор для дочернего элемента и родительского идентификатора совпадают и являются значением parentID, когда объект возвращается. После супервызов переменные childs.ID перезаписываются. Я предполагаю, что область переменных доступна для обоих, поэтому, когда parent устанавливает переменные.ID, он перезаписывает дочерние переменные.ID. Можно ли этого избежать, не именовав идентификаторы по-разному?
Функция чтения родительского объекта не отображается. Если я, например, переименовал родительскую функцию чтения «read2», функция выполняет. Я также подозреваю, что функции находятся в общей области видимости, и поэтому функция чтения детей выполняется.
Есть ли способ поддерживать одни и те же структуры cfc и заставить эту функциональность работать должным образом?
Заранее спасибо.
<cfcomponent accessors="true" extends="Custom" output="false">
<cfproperty name="ID" type="numeric" />
<cfproperty name="listID" type="numeric" />
<cfproperty name="customfieldID" type="numeric" />
<cfscript>
variables.dsn = '';
</cfscript>
<cffunction name="init" access="public" output="false" returntype="ListCustom">
<cfargument name="dsn" type="string" required="true" />
<cfargument name="ID" type="numeric" required="true" />
<cfargument name="listID" type="numeric" required="false" default="0" />
<cfargument name="customFieldID" type="numeric" required="false" default="0" />
<cfscript>
variables.dsn = arguments.dsn;
variables.ID = arguments.ID;
variables.listID = arguments.listID;
variables.customFieldID = arguments.customFieldID;
if (variables.ID){
read();
if (variables.customFieldID){
Super.init(dsn=variables.dsn,ID=variables.customfieldID);
}
}
</cfscript>
<cfreturn this />
</cffunction>
<cffunction name="read" access="private" output="false" returntype="void">
<cfquery name="local.q" datasource="#variables.dsn#">
SELECT customfieldID, listID
FROM listCustomFields
WHERE ID = <cfqueryparam value="#variables.ID#" cfsqltype="cf_sql_integer">
</cfquery>
<cfif local.q.recordcount>
<cfset variables.listID = local.q.listID />
<cfset variables.customFieldID = local.q.customFieldID />
</cfif>
</cffunction>
<cfcomponent accessors="true" output="false">
<cfproperty name="ID" type="numeric" />
<cfproperty name="fieldName" type="string" />
<cfscript>
variables.dsn = '';
</cfscript>
<cffunction name="init" access="public" output="false" returntype="Custom">
<cfargument name="dsn" type="string" required="true" />
<cfargument name="ID" type="numeric" required="true" />
<cfargument name="fieldName" type="string" required="false" default="" />
<cfscript>
variables.dsn = arguments.dsn;
variables.ID = arguments.ID;
variables.fieldName = arguments.fieldName;
if (variables.ID){
read();
}
</cfscript>
<cfreturn this />
</cffunction>
<cffunction name="read" access="private" output="false" returntype="void">
<cfquery name="local.q" datasource="#variables.dsn#">
SELECT fieldName
FROM CustomField
WHERE ID = <cfqueryparam value="#variables.ID#" cfsqltype="cf_sql_integer">
</cfquery>
<cfif local.q.recordcount>
<cfset variables.fieldName = local.q.fieldName />
</cfif>
</cffunction>
Вы можете поделиться некоторыми кодами? Кроме того, в отношениях между родителями и дочерними элементами я не уверен, что родительский родительский путь - это путь. Оба могут расширять «базовый» объект, но не уверен, что дочерний родительский родитель - это путь. –