Tôi đang chuyển đổi trang web cũ sang CF 10 và muốn chuyển tiếp một số mã trợ giúp của tôi.ColdFusion - Chuyển đổi truy vấn thành các thanh toán CFC
Mã nhìn vào một truy vấn, tìm thấy những điều trong trường hợp của chúng tôi, và populates họ:
<cffunction name="populateSelf">
<cfargument name="source" type="query" required="yes" />
<cfif arguments.source.recordcount EQ 1>
<cfloop list="#arguments.source.columnlist#" index="local.col">
<cfif structKeyExists(variables.instance, local.col)>
<cfset variables.instance[local.col] = arguments.source[local.col]) />
</cfif>
</cfloop>
</cfif> <!--- one record? --->
</cffunction>
tôi đã thay thế structKeyExists(variables.instance, local.col)
với một đánh giá tiện dụng tài sản hiện tại của chúng tôi sử dụng 'getMetaData()', nhưng tôi đang gặp rắc rối với các dòng tiếp theo: <cfset variables.instance[local.col] = arguments.source[local.col]) />
Nếu tôi thay đổi nó để <cfset this[local.col] =arguments.source[local.col] />
, nó bỏ qua setters ngầm và chỉ cần đặt các kết quả trong phạm vi này ...
để để thử và gọi cho những người định cư của chúng tôi, tôi đã thử mã này:
<cfset setValue =arguments.source[local.col] />
<cfset evaluate("set#local.col#('#setValue#')" />
nhưng điều này có vẻ phức tạp và dễ bị lỗi (cũng phải thoát khỏi bất kỳ "" nào trong chuỗi).
Cách tốt nhất để sử dụng truy vấn để tải một số hoặc tất cả thuộc tính CFC mà không phải gọi rõ ràng this.setPROPERTYNAME(query.COLUMN)
có thể vài chục lần ????
có! "Làm cách nào để gọi phương thức động!" Tôi không thể nghĩ ra các động từ chính xác để sử dụng ... kỳ nghỉ khốc liệt, bộ não của tôi bị rò rỉ. –
Hey Stephen ... @ Baynezy của câu trả lời là tốt hơn so với tôi! Bạn nên chạy với những gì ông đề nghị chứ không phải những gì tôi đề nghị. –