【问题标题】:Pass text box value to a dojo grid's query parameter将文本框值传递给 dojo 网格的查询参数
【发布时间】:2012-07-30 20:30:51
【问题描述】:

我正在尝试将文本框中的值作为 dojo 数据网格中的查询参数传递,并希望澄清下面列出的两个问题。 dojo 网格使用查询参数启动对服务器的调用,以启动搜索并返回结果(显示在数据网格上)

  1. 是否可以通过调用刷新根据文本中的值重新加载网格(dijit.byId("mygrid").refresh

  2. 如果是,如何将文本框的值作为查询参数传递给数据网格。

下面列出的是我的相关代码

        function reload(){
        dijit.byId("mygrid").refresh;
    }


     <div class="test"> 
            <input id="searchParam" >
            <button dojoType="dijit.form.Button" type="submit" onclick=reload()>
                Search
            </button> 


        </div>

    <div    dojoType="dojox.grid.DataGrid"
                                id="mygrid" 
                                jsid="mygrid"
                                      store="dojox.data.JsonRestStore"
     target="<c:url value='members' />">
                                query="{ 
                                searchCriteria: ? TODO How to pass value of text box here?,

                                }"
                                rowsPerPage="1000"
                                autoWidth="true"

                                autoHeight="true"
                                selectionMode="single"
                                selectable="true"
                                errorMessage="Error loading data"
                                noDataMessage="<span class='dojoxGridNoData'>No members found.</span>">
                </div>

【问题讨论】:

    标签: dojo dojox.grid.datagrid


    【解决方案1】:

    您应该能够执行以下操作:

    function reload() {
        var val = dojo.byId('searchParam').attr('value');
        dijit.byId("mygrid").setQuery({ propName: val });
    }
    

    您需要正确构建查询{ propName: val }

    【讨论】:

    • 感谢@Craig Swing。我能够调用 reload() 函数并在网格上使用 .setQuery 。我还在网格上遇到了一个 filter() 方法,这确实导致了对服务器的类似调用,但网格没有刷新。
    • 当我点击一个按钮(onClick 事件)时,我能够调用重新加载 js()。你知道我如何在用户按下文本框上的 ENTER 键时调用它。我不确定哪个事件会触发这个。我尝试使用 dojo 表单 (dijit.form.Form) 并在 'onSubmit' 事件中调用 js。这似乎导致整个页面重新加载并且也没有传递所需的参数(从而导致调用不同的控制器方法)。有没有一种方法可以避免使用 dijit.form.Form 但当用户单击 ENTER 键时仍会触发重新加载 js。
    • 别管我之前的查询了。从另一个帖子中遇到这个example。虽然它仍然使用 diji.Form,但它并没有重新加载整个页面。必须更好地理解它。我认为在我的第一个示例中,我没有执行 stopEvent()。
    • 任何表单,dijit.form.Form 也会将页面重新加载到action href,如果它的 'onsubmit' 返回 true。使用 dojo.stopEvent 主要是针对带有 onclick 的 a 标签,用 if(this.validate()) dojo.xhrPost({url:this.action, form:this}); return false 覆盖 dijit.form.Form .onSubmit()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2013-10-31
    • 2021-01-28
    • 2017-09-27
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多