如何在ColdFusion 8中选择ARGUMENTS?

Evi*_*mes 3 coldfusion coldfusion-8 coldfusion-9 coldfusion-10

我一直在使用ColdFusion 8/9/10.下面的代码在CF9和CF10中运行得非常好.(我在9中开发了它).但它在CF8中不起作用.

如果您在CF9和CF10中运行下面的代码(在底部),您应该立即获得HTML结果:

<select>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option selected="" value="3">Option 3</option>
</select>
Run Code Online (Sandbox Code Playgroud)

如果您在CF8中运行以下代码,您将收到此错误:

The SELECTED parameter to the WrapOption function is required but was not passed in.
Run Code Online (Sandbox Code Playgroud)

在CF8中,我如何修改此代码以使CF8中的"selected"参数(或任何其他参数)可选?

<cfscript>

Options = WrapOption("Option 1", 1);
Options = Options & WrapOption("Option 2", 2);
Options = Options & WrapOption("Option 3", 3, "Selected");
SelectBox = WrapSelect(Options);
writeOutput(SelectBox);

// WRAP OPTION
function WrapOption(Content, Value, Selected) {
    LOCAL.Content = ARGUMENTS.Content;
    LOCAL.Properties = " value='#ARGUMENTS.Value#'";
    // SELECTED
    if (structKeyExists(ARGUMENTS, "Selected")) {
        LOCAL.Properties = LOCAL.Properties & " selected";
    }
    LOCAL.Item = "<option #LOCAL.Properties#>#LOCAL.Content#</option>";
    return LOCAL.Item;
}
// WRAP SELECT
function WrapSelect(Options, Class, ID) {
    LOCAL.Options = ARGUMENTS.Options;
    LOCAL.Properties = "";
    // CLASS
    if (structKeyExists(ARGUMENTS, "Class")) {
        LOCAL.Properties = LOCAL.Properties & " class='#ARGUMENTS.Class#'";
    }
    // ID
    if (structKeyExists(ARGUMENTS, "ID")) {
        LOCAL.Properties = LOCAL.Properties & " id='#ARGUMENTS.ID#'";
    }
    LOCAL.Item = "<select #LOCAL.Properties#>#LOCAL.Options#</select>";
    return LOCAL.Item;
}
</cfscript>
Run Code Online (Sandbox Code Playgroud)

Ste*_*ant 7

在CFSCRIPT中,除非提供默认值(在CF9之前无法完成),否则需要命名参数.

要在ColdFusion 8及更低版本的CFSCRIPT中执行可选参数,需要从函数定义中删除该参数,并检查它是否存在于函数体中.您可以通过利用ColdFusion处理序数(有序而不是命名)参数来实现此目的.

function WrapOption(Content, Value) {
    if ( ArrayLen(Arguments) GTE 3 ) {
        ARGUMENTS.Selected = ARGUMENTS[3];
    }   
    LOCAL.Content = ARGUMENTS.Content;
    LOCAL.Properties = " value='#ARGUMENTS.Value#'";
    // SELECTED
    if (structKeyExists(ARGUMENTS, "Selected")) {
        LOCAL.Properties = LOCAL.Properties & " selected";
    }
    LOCAL.Item = "<option #LOCAL.Properties#>#LOCAL.Content#</option>";
    return LOCAL.Item;
}
Run Code Online (Sandbox Code Playgroud)