Flex CallResponder适用于初始点击,但不适用于I.E

时间:2014-09-09 20:41:52

标签: flex

我正在使用Flash Builder 4.6为运输系统应用程序编程FLEX。下面的代码在我们的服务器上运行时可以很好地使用Firefox,但出于某些原因,当我使用I.E.我只从点击中得到第一个回复,随后的点击不会返回我需要的东西,除非我正在运行我的I.E. 11在调试模式下。

这是应该做的。用户点击一个公共汽车站。他们可以点击一个按钮来点击HTTP服务并返回一个json字符串,其中包含接下来的四个总线以及它们在弹出窗口中的时间。他们可以关闭这个弹出窗口,如果他们点击“点击这里下一个4总线到达时间”,它应该刷新列表(在firefox中这是有效的,但是对于IE 11,我必须进行调试才能使其正常工作,不会没有它的工作只返回第一次点击的值,后续点击继续显示列表中已有的内容。

是的,我是编程flex的新手,我确定我在格式化方面存在一些问题,以及我如何调用我的代码,但我正在学习。看到工作令人兴奋,但我仍然遇到这些问题。任何想法或建议都非常感谢。我试图提供足够的信息,但很抱歉。我正在以某种方式考虑我的CallResponder问题。预先感谢您的任何帮助。也许在I.E.中有缓存的东西?我已经运行了fiddler,它显示了初始请求,但是当我再次点击时它甚至没有发出请求。

    <esri:infoWindowRenderer>
                <fx:Component>
                    <esri:LabelDataRenderer label="Bus Stop on Selected Route">
                        <fx:Script>
                            <![CDATA[                                   
                                import flash.events.*;
                                import flash.sampler.NewObjectSample;

                                import mx.collections.ArrayCollection;
                                import mx.controls.Alert;
                                import mx.controls.List;
                                import mx.controls.Text;
                                import mx.events.CloseEvent;
                                import mx.events.FlexEvent;
                                import mx.managers.PopUpManager;

                                import spark.components.Button;
                                import spark.components.TitleWindow;

                                protected function clickHandler(event:MouseEvent):void {
                                    var busStopLink:String = "http://rtcws.rtcsnv.com/mobile/geoRoutes.cfm?bsid=";
                                    var stopNumber:String = data.stopNumber;
                                    var urlString:String = busStopLink + stopNumber;
                                    var urlReq:URLRequest = new URLRequest(urlString);
                                    navigateToURL(urlReq, "_blank");
                                }

                                public var myTitleWindow:TitleWindow = new TitleWindow();

                                public function initApp():void {
                                    showBusTimesButton.addEventListener(MouseEvent.CLICK, showBusTimes_clickHandler);   
                                }

                                public function showBusTimes_clickHandler(event:Event):void {
                                    var busEndpoint:String = "/rtcTimes/" + data.stopNumber;
                                    fetchBusTimesResult.token = busTimes.fetchBusTimes(busEndpoint);
                                    myTitleWindow = new TitleWindow();
                                    myTitleWindow.title = "Next 4 Bus Arrival Times for Stop: " + data.stopNumber;
                                    populateWindow();
                                    PopUpManager.addPopUp(myTitleWindow, this, true);
                                    PopUpManager.centerPopUp(myTitleWindow);
                                    myTitleWindow.addEventListener(CloseEvent.CLOSE, closeTitleWindow);
                                }

                                public function populateWindow():void {
                                    myTitleWindow.addElement(dataGrid);
                                }

                                public function closeTitleWindow(event:CloseEvent):void {
                                    PopUpManager.removePopUp(myTitleWindow);
                                }
                            ]]>                                                                                                                               
                        </fx:Script>
                        <fx:Declarations>
                            <s:CallResponder id="fetchBusTimesResult"/>
                            <bustimes:BusTimes id="busTimes"
                                               fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"
                                               showBusyCursor="true"/>
                            <s:DataGrid id="dataGrid" dataProvider="{fetchBusTimesResult.lastResult}" sortableColumns="false"
                                        requestedRowCount="4">
                                <s:columns>
                                    <s:ArrayList>
                                        <s:GridColumn dataField="ROUTE" headerText="Route" resizable="false"></s:GridColumn>
                                        <s:GridColumn dataField="ARRIVAL" headerText="Arrival Time" resizable="false"></s:GridColumn>
                                        <s:GridColumn dataField="DIR" headerText="Direction" resizable="false"></s:GridColumn>
                                    </s:ArrayList>
                                </s:columns>
                                <s:typicalItem>
                                    <fx:Object ARRIVAL="ARRIVAL_TIME" ROUTE="ROUTE1" DIR="DIRECTION"></fx:Object>
                                </s:typicalItem>
                                <!--<s:AsyncListView list="{fetchBusTimesResult.lastResult}"/>-->
                            </s:DataGrid>
                        </fx:Declarations>
                        <s:VGroup paddingBottom="5" 
                                  paddingLeft="5"
                                  paddingRight="5"
                                  paddingTop="5"
                                  creationComplete="initApp();"> 
                            <s:Label text="Stop Number: {data.stopNumber}"/>
                            <s:Label text="Stop Name: {data.Stopname}"/>
                            <s:Label text="Route(s) Served: {data.routesServed}" />
                            <s:Button id="showBusTimesButton" label="Click Here for Next 4 Bus Arrival Times"/>

                        </s:VGroup>
                    </esri:LabelDataRenderer>
                </fx:Component>
            </esri:infoWindowRenderer>      

2 个答案:

答案 0 :(得分:0)

这是一种相当复杂的做事方式,并不确定它是否是有意的。

你为什么这样做:

                            public function populateWindow():void {
                                myTitleWindow.addElement(dataGrid);
                            }

为什么你不能创建一个新的MXML组件,MyTitleWindow,并将所有MXML标记放在该标题窗口中,并且在你的调用类中做这样的事情?

var busEndpoint:String =“/ rtcTimes /”+ data.stopNumber;

                                myTitleWindow = new MyTitleWindow();
                                myTitleWindow.title = "Next 4 Bus Arrival Times for Stop: " + data.stopNumber;

在MyTitleWindow的creationComplete中

fetchBusTimesResult.token = busTimes.fetchBusTimes(busEndpoint);

答案 1 :(得分:0)

好的,它不是一个callResponder问题,它是I.E.的一个缓存问题。我只用I.E.找出了缓存问题。如果我进入工具 - >互联网选项 - &gt;常规 - &gt;浏览历史记录下的设置 - &gt;然后打开“每次我访问网页”,当我点击按钮以获得接下来的4个停止时间时,它工作得很好(通过fiddler验证我可以一遍又一遍地点击它并且它一直发送请求,相比之下之前它只发送一个然后缓存结果)。因此,当我进行调试时,为什么它会请求新的网页,因为它处于调试模式,然后当我切换回常规模式时它没有工作。我不确定这是否是一个绝对的答案,因为用户必须打开此选项并要求公众这样做可能非常困难,但这是一个解决方法。我也尝试修改元标记以包含&#34; pragma&#34;&#34; no-cache&#34;和#34;缓存控制&#34;&#34; no-store&#34;和&#34;到期&#34;&#34; -1&#34;并没有人帮助解决这个问题。我甚至在标签之后添加了一个标签,正如一些人所说的那样,它仍然不会更新页面并发送我的请求。如果有人有任何其他想法,我向他们开放,但目前这个解决方案就是这样,临时工作。