0 0

dojo关于函数调用顺序的问题5

我想在chooseQuery方法执行的最后调用search()函数,而search()要引用生成的输入框的值,然而我的代码程序每次执行的时候,当调用search()时,输入框中的值还未设进去,即每次得到的值是空的.但是设置输入框的方法明明在search()函数之后执行的。而我确定值有设进去。是不是和上下文有关?


/**
 * @param data
 * @return
 */
function chooseQuery(data)
{
    var methodCount = dojo.query("input[type='radio']");
    for (var i = 0; i < methodCount.length; i++)
    {
        if (methodCount[i].checked)
        {
            var optionValue = methodCount[i].value;
                        // queryName是一个FilteringSelect 改变它的选项
            queryName.attr("value",optionValue,false);
                        // 根据变化的选项值创建不同的输入框或下拉框
            selectQuery();
                        // 初始化显示grid的面板
            initGridPane();
                        // 将值设置到生成的输入框中
            addElementToDialogById(optionValue,data);
            queryName._lastValueReported=null;
            dijit.byId("availableQueriesDialog").hide();
            dijit.byId("queriedConcept").attr("style", "display:none;");
            break ;
        }
    }
        // 根据值进行查找
        search();
}



selectQuery();的代码如下
function selectQuery() 
{
     intiParamPane();
     var datatr = dojo.byId("datatr");
     qnStore.fetch
     (
        {
            // search items by condition
            query : 
            {
                name :queryName.value
            },
            onComplete : function(items, request) 
            {
                if ((qnStore.getValues(items[0],"parameter")).length > 0)
                {
                    var properties = qnStore.getAttributes(items[0]);
                    // hold all of the values for the parameter
                    var parameters = qnStore.getValues(items[0], properties[1]);
                    // hold all of the types for parameter
                    var types = qnStore.getValues(items[0], properties[2]);
                    // judge the parameter whether is needed
                    var requires = qnStore.getValues(items[0], properties[3]);
                    // if has regular 
                    var regulars = qnStore.getValues(items[0], 'regular');
                    for (var i = 0; i < parameters.length; i++)
                    {
                        document.getElementById("inputDiv").setAttribute("class", "inputDiv");
                        if (types[i]  == "array")
                        {
                            createSelectElement(datatr, parameters[i],requires[i], types[i]);
                        }
                        else
                        {
                            createInputElement(datatr, parameters[i], requires[i], regulars[i]);

                        }
                    }
                }
            }
        }
     );
}





search()函数代码如下
function search()
{
    var queryName = dojo.byId('queryName').value;
    var flag = validateParameter(queryName);
    if (flag)
    {
        return;
    }
    initGridPane();
    var dialog = (dijit.byId("waitDialog") == null ? showWaitingDialog() : (dijit.byId("waitDialog"))) ;
    dialog.show();
    qnStore.fetch
    ({
        // search items by condition
        query : 
        {
            name :queryName
        },
        onComplete : function(items, request) 
        {
            var properties = qnStore.getAttributes(items[0]);
            // hold all of the values for the parameter
            var parameters = qnStore.getValues(items[0], properties[1]);
            // hold every params
            var params = "?method="+queryName;
            for (var i = 0; i < parameters.length; i++)
            {
                var attribute = parameters[i];
                var _value = dojo.byId(parameters[i]).value;
                params += "&"+attribute+"="+_value;
            }
            console.log(browser_action_name + params);
            dojo.xhrGet
            (
              {
                 handleAs: 'json',
                 url: browser_action_name + params,
                 load:showResult,
                 error:availableQueriesDialog
              }
            )
        }
    });
}
2010年12月03日 10:17
目前还没有答案

相关推荐

    dojo类机制实现原理分析

    同时,为了确保多重继承中成员函数的访问顺序,Dojo引入了C3线性化算法,有效地解决了继承顺序问题。这些技术的应用,使得Dojo能够提供强大而灵活的面向对象编程能力,为开发者构建复杂应用提供了有力支持。

    使用_Dojo_的_Ajax_应用开发进阶教程

    - **函数调用**: 在非构造函数调用中,`this` 通常指向全局对象 (`window` 在浏览器环境中)。 - **对象方法调用**: 在对象的方法调用中,`this` 指向该对象。 - **构造函数调用**: 使用 `new` 关键字调用函数时,`...

    dojo心得分享

    - 注意回调函数中参数的顺序必须与`require`函数第一个参数中的插件顺序一致。 #### 三、Dojo动画功能 1. **移动动画** Dojo提供了丰富的动画功能,其中`fx.slideTo`方法可用于实现元素的移动动画效果。基本...

    arcgis for js离线部署及dojo框架的入门

    在dojoConfig对象中,我们可以配置 dojo 框架的行为,例如指定模块的位置、加载的顺序等。下面是一个基本的dojoConfig配置示例: ```javascript var dojoConfig = { packages: [{ name: "js", location: ...

    jsloader 异步加载js文件

    5. **通知主程序**:所有JS文件加载完毕后,`JSLoader`会触发一个全局事件或调用预设的回调函数,以便开发者进行后续操作。 ### 结合Dojo进度条 在示例中,`JSLoader`被用于与Dojo的进度条(ProgressBar)组件结合...

    使用ArcGISAPIforJavaScript创建web应用

    在ArcGIS API for JavaScript中,通过require函数调用特定模块,可以异步加载所需的资源,这对于提升Web应用性能至关重要。 ArcGIS API for JavaScript的API结构也非常丰富。例如,esri.map是创建地图的主要入口点...

    cypress-coding-dojo

    6. **Spying and Stubbing**:在更复杂的测试场景中,可能需要对对象函数进行监控(spying)或替换(stubbing)。Cypress的`cy.spy()`和`cy.stub()`可以帮助我们实现这一点,以便在不实际调用外部服务的情况下测试...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    程序描述:本章将介绍 GWT应用中高级应用的部分,包括各中组件和布局、如何发送XMLHttpRequest请求,以及如何解决浏览器历史记录问题等等,同时读者还将详细的了解RPC应用的开发过程。 /xmlsample/AjaxSample....

    ArcGIS API for JavaScript v3.7下载(api + sdk开发包)

    - **Dojo Toolkit**:ArcGIS API基于Dojo Toolkit构建,熟悉其模块化开发方式和Widget库能提高开发效率。 - **异步编程**:地图加载、服务请求等通常是异步的,理解Promise或回调函数是必要的。 - **CSS和HTML...

    struts2最新jar包

    拦截器是一系列按照特定顺序执行的函数,可以实现如日志、权限验证、事务管理等通用功能,无需在每个Action中重复编写。 3. **配置文件**:Struts2的配置文件通常为`struts.xml`,用于定义Action、结果类型、包配置...

    javascript异步编程

    在同步编程模式中,代码按照顺序执行,每一行代码必须等待其前一行代码完成才能继续,这就导致了当某个耗时操作(如网络请求)发生时,整个程序会暂停,直到该操作完成。而在异步编程中,程序不会等待耗时操作完成,...

    史上最全开发速查表

    - `map(callback, thisObject=null)`: 创建一个新数组,其结果是调用一个提供的函数后的原数组每一项。 - `pop()`: 删除并返回数组的最后一个元素。 - `push(...items)`: 向数组的末尾添加一个或更多元素,并返回...

Global site tag (gtag.js) - Google Analytics