2009-06-10 5 views

Trả lời

16

Câu trả lời ngắn: Nó không quan trọng.

cfscript không xuất ra bất cứ điều gì trừ khi bạn gọi rõ ràng writeOutput() từ nó. Điều này bao gồm các hàm trong cfscript cũng như bất kỳ mã cfscript nào bên ngoài một hàm.

Điều này khác với cú pháp của thẻ CF, theo mặc định, đầu ra ít nhất khoảng trắng giữa các thẻ. Trong cfscript, mọi văn bản bạn viết sẽ được biên soạn bởi công cụ CFML. trong thẻ CF, mọi văn bản bạn viết sẽ được ghi vào bộ đệm đầu ra và được gửi tới trình duyệt.

Câu trả lời dài: Cũng giống như không chỉ định thuộc tính đầu ra.

cfscript khối không xuất ra bất kỳ thứ gì. Bất kỳ khối thẻ nào, trừ khi được bọc trong cfsilent, hãy tạo khoảng trống đầu ra nếu không có gì khác. Có, ngay cả cffunctions làm, nhưng đầu ra được loại bỏ nếu thuộc tính đầu ra được đặt thành false.

Bản chất câu trả lời của Peter Boughton là chính xác. Nó không được bọc trong cfsilent cũng không phải cfoutput. Đầu ra không bị cấm, nhưng nó không xảy ra trừ khi bạn làm điều đó một cách rõ ràng.

Bạn luôn có thể kết hợp một thẻ dựa trên cffunction với tập lệnh để tận dụng tối đa cả hai thế giới. Cái gì đó như...

<cffunction name="x" output="false" access="package"> 
    <cfargument name="y" type="string" required="false" default="YY" /> 
    <cfscript> 
     var someValue = y & "something"; 
     writeOutput("test"); // this will not be written 
     return someValue; 
    </cfscript> 
</cffunction> 

này cho phép bạn chỉ định một đầu ra và truy cập vào thẻ cffunction cũng như cho phép đối số là tùy chọn (mà bạn không thể làm qua cfscript chức năng), sau đó điền vào cơ thể với cfscript, kể cả báo cáo var và hàm trả về.

Tất nhiên, đối với chức năng đó, nếu bạn loại bỏ các thuộc tính output hoặc thay đổi nó để true, nó sẽ đầu ra "test" trước khi trở về.

+1

Trong CF9, các hàm được định nghĩa trong cfscript có thể có các đối số tùy chọn. Xem [Xác định các thành phần và chức năng trong CFScript] (http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSE99A664D-44E3-44d1-92A0-5FDF8D82B55C.html). –

+0

Đáng buồn thay, điều này không thực sự chính xác. Hãy tiếp tục và chạy một 'SerializeJSON()' trên một kết quả ORM trong một hàm cfscript và bạn sẽ thấy 3 dòng khoảng trắng. Trong 'cffunction' với' output = 'no'' không có khoảng trắng. – Nucleon

+0

Sửa đổi - bạn có thể đặt đầu ra = "không" trên một hàm cfscript để làm hỏng hành vi này. – Nucleon

1

Tôi không hoàn toàn chắc chắn, nhưng tôi đoán là các chức năng tập lệnh giống với các thẻ cffunction trong vấn đề này - mặc định là không true cũng không false.

Thiết lập thuộc tính output cho một cffunction, sau đây là các trường hợp:

  • true tương đương với chức năng được bọc trong cfoutput.
  • false tương đương với chức năng đang được gói trong cfsilent.
  • Để mặc định (không xác định) tương đương với mã tiêu chuẩn được gói không bằng cfoutput cũng không cfsilent.

Tuy nhiên, tôi gần như không bao giờ sử dụng cfscript và điều này có thể không phải là trường hợp - chúng tôi sẽ phải đợi những người khác đến và xác nhận hoặc sửa lỗi này.

4

chức năng cfscript là một con khỉ lạ. Họ là loại cả hai. Bạn không thể xác định rằng chúng là output = "false", nhưng chúng cho đến khi bạn sử dụng writeOutput(), nhưng chúng được báo cáo bởi cfcexplorer như là output = "true". Đó là một vấn đề kỳ quặc mà tôi nghĩ rằng ban cố vấn cfml đang xem xét ngay bây giờ.

+0

Tôi nghĩ đây là câu trả lời đúng, nhưng ai đó có thể xác nhận? cảm ơn bạn. – Henry

+0

Thực ra, tôi sẽ nói cả câu trả lời của Peter Boughton và câu trả lời của tôi đúng hơn. –