2013-01-01 21 views
6

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 ????

Trả lời

7

Vì vậy, nếu tôi đọc tất cả điều này một cách chính xác, câu hỏi của bạn thực sự là "làm cách nào để gọi phương thức động?" Và tất cả phần còn lại của nó được đặt mặc quần áo?

Bạn có thể sử dụng một chuỗi để thiết lập tên biến động, sau đó thiết lập một tài liệu tham khảo chức năng đó, sau đó gọi hàm qua các tài liệu tham khảo:

myMethodName = "set#local.col#"; 
myMethodReference = this[myMethodName]; 
myMethodReference(arguments.source[local.col]); 
+0

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ỉ. –

+2

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ị. –

6

Nếu bạn muốn gọi phương pháp tự động bạn có thể sử dụng cfinvoke

<cfinvoke method="set#property#"> 

Make ý nghĩa?

+1

Trên thực tế vâng cuộc gọi tốt. Tiết kiệm các horsing xung quanh với tài liệu tham khảo chức năng. –

+0

Ok, tôi đã thử nhưng tôi không thể lấy nó để chấp nhận một đối số được đặt vì tôi không biết đặt tên cho đối số. (Tôi đã thử không có may mắn) ... –

+0

Ah ok Tôi thấy vấn đề của bạn. Bạn không có quy ước đặt tên cho tên đối số của bạn cho người định cư của bạn giống như cách bạn có quy ước đặt tên cho chính phương thức của mình? Nếu bạn làm sau đó bạn chỉ có thể sử dụng cfinvokeargument bổ sung ngoài những gì tôi đặt trước. – baynezy