为 Checkout 屏幕添加代码

现在您已准备就绪,可以向应用程序的 Checkout 屏幕(主时间轴上的第 10 帧)添加代码了。此代码处理用户在 Billing Information、Shipping Information 和 Credit Card Information 窗格(先前使用 Accordion 组件和其它组件创建)中输入的数据。

  1. 在时间轴中,选择"动作"图层中的第 10 帧,然后插入一个空白关键帧(选择"插入">"时间轴">"空白关键帧")
  2. 打开"动作"面板 (F9)。
  3. 在"动作"面板中添加以下代码:
    stop();
    import mx.containers.*;
    
    // 定义舞台上的 Accordion 组件。
    var checkout_acc:Accordion;
    
  4. 接下来,将向 Accordion 组件实例添加第一个子项,以接受来自用户的开单信息。添加以下代码:
    // 定义 Accordion 组件的子项。
    var child1 = checkout_acc.createChild("checkout1_mc", "child1_mc", {label:"1. Billing Information"});
    var thisChild1 = child1.checkout1_sp.spContentHolder;
    

    第一行调用 Accordion 组件的 createChild() 方法,并创建 checkout1_mc 影片剪辑元件(先前已创建)的一个实例,其实例名称为 child1_mc,标签为"1。Billing Information"。第二行代码创建指向嵌入的 ScrollPane 组件实例的快捷方式。

  5. 创建 Accordion 实例的第二个子项,以接受发运信息:
    /* 将第二个子项添加到 Accordion。 
    为 sameAsBilling_ch CheckBox 添加一个事件侦听器。
    此操作将第一个子项的表单值复制到第二个子项。 */
    var child2 = checkout_acc.createChild("checkout2_mc", "child2_mc", {label:"2. Shipping Information"});
    var thisChild2 = child2.checkout2_sp.spContentHolder;
    var checkboxListener:Object = new Object();
    checkboxListener.click = function(evt:Object) {
        if (evt.target.selected) {
            thisChild2.shippingFirstName_ti.text = thisChild1.billingFirstName_ti.text;
            thisChild2.shippingLastName_ti.text = thisChild1.billingLastName_ti.text;
            thisChild2.shippingCountry_ti.text = thisChild1.billingCountry_ti.text;
            thisChild2.shippingProvince_ti.text = thisChild1.billingProvince_ti.text;
            thisChild2.shippingCity_ti.text = thisChild1.billingCity_ti.text;
            thisChild2.shippingPostal_ti.text = thisChild1.billingPostal_ti.text;
        }
    };
    thisChild2.sameAsBilling_ch.addEventListener("click", checkboxListener);
    

    前两行代码与创建 Billing Information 子项的代码类似:创建 checkout2_mc 影片剪辑元件的一个实例,该实例的名称为 child2_mc,标签为"2.Shipping Information"。第二行代码创建指向嵌入的 ScrollPane 组件实例的快捷方式。

    从第三行代码开始,向 CheckBox 实例添加一个事件侦听器。如果用户单击该复选框,发运信息则使用用户在 Billing Information 窗格中输入的数据。

  6. 然后,为 Accordion 实例创建第三个子项,用于信用卡信息:
    // 定义第三个 Accordion 子项。
    var child3 = checkout_acc.createChild("checkout3_mc", "child3_mc", {label:"3. Credit Card Information"});
    var thisChild3 = child3.checkout3_sp.spContentHolder;
    
  7. 添加此代码以创建用于信用卡月份、年份和类型的 ComboBox 实例,并使用一个静态定义的数组填充所有实例:
    /* 设置舞台上三个 ComboBox 实例的值:
    ccMonth_cb, ccYear_cb and ccType_cb */
    thisChild3.ccMonth_cb.labels = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
    thisChild3.ccYear_cb.labels = [2004, 2005, 2006, 2007, 2008, 2009, 2010];
    thisChild3.ccType_cb.labels = ["VISA", "MasterCard", "American Express", "Diners Club"];
    
  8. 最后,添加以下代码将事件侦听器添加到 Checkout 按钮和 Back 按钮。用户单击 Checkout 按钮时,侦听器对象将 Billing Information、Shipping Information 和 Credit Card Information 窗格的表单字段复制到发送至服务器的 LoadVars 对象中。(使用 LoadVars 类可将对象中的所有变量发送到指定的 URL。)用户单击 Back 按钮时,应用程序返回到主屏幕。
    /* 为 checkout_button Button 实例创建一个侦听器。
    用户单击 Checkout 按钮时,此侦听器将所有表单变量发送到服务器。 */
    var checkoutListener:Object = new Object();
    checkoutListener.click = function(evt:Object){
        evt.target.enabled = false;
        /* 创建两个 LoadVars 对象实例,它们将变量发送到远程服务器,
        并接收来自远程服务器的结果。 */ 
        var response_lv:LoadVars = new LoadVars();
        var checkout_lv:LoadVars = new LoadVars();
        checkout_lv.billingFirstName = thisChild1.billingFirstName_ti.text;
        checkout_lv.billingLastName = thisChild1.billingLastName_ti.text;
        checkout_lv.billingCountry = thisChild1.billingCountry_ti.text;
        checkout_lv.billingProvince = thisChild1.billingProvince_ti.text;
        checkout_lv.billingCity = thisChild1.billingCity_ti.text;
        checkout_lv.billingPostal = thisChild1.billingPostal_ti.text;
        checkout_lv.shippingFirstName = thisChild2.shippingFirstName_ti.text;
        checkout_lv.shippingLastName = thisChild2.shippingLastName_ti.text;
        checkout_lv.shippingCountry = thisChild2.shippingCountry_ti.text;
        checkout_lv.shippingProvince = thisChild2.shippingProvince_ti.text;
        checkout_lv.shippingCity = thisChild2.shippingCity_ti.text;
        checkout_lv.shippingPostal = thisChild2.shippingPostal_ti.text;
        checkout_lv.ccName = thisChild3.ccName_ti.text;
        checkout_lv.ccType = thisChild3.ccType_cb.selectedItem;
        checkout_lv.ccNumber = thisChild3.ccNumber_ti.text;
        checkout_lv.ccMonth = thisChild3.ccMonth_cb.selectedItem;
        checkout_lv.ccYear = thisChild3.ccYear_cb.selectedItem;
        
        /* 将变量从 checkout_lv LoadVars 发送到服务器上的远程脚本。 
        保存 response_lv 实例中的结果。 */
        checkout_lv.sendAndLoad("http://www.flash-mx.com/mm/firstapp/cart.cfm", response_lv, "POST");
        response_lv.onLoad = function(success:Boolean) {
            evt.target.enabled = true;
        };
    };
    thisChild3.checkout_button.addEventListener("click", checkoutListener);
    cart_mc._visible = false;
    var backListener:Object = new Object();
    backListener.click = function(evt:Object) {
        evt.target._parent.gotoAndStop("home");
    }
    back_button.addEventListener("click", backListener);