加载extJS Combo远程无法正常工作

时间:2009-05-17 09:57:46

标签: asp.net javascript extjs

这是我第一次尝试使用extJS,经过几个小时的挣扎,有些东西运行正常,除了我有一个组合列表,我在边缘情况下无法过滤到少于2000个项目,所以我'我试图通过远程页面列表,但我一定做错了。

我的数据存储和组合看起来如下:

var remoteStore = new Ext.data.JsonStore({
        //autoLoad    : true,
        url         : 'addition-lists.aspx',
        fields      : [{name: 'extension_id'}, {name: 'extension'}],
        root        : 'extensionList',
        id          : 'remoteStore'               
    });
.
.
                        xtype         : 'combo',
                        fieldLabel    : 'Remote',
                        name          : 'remote',
                        displayField  : 'extension',
                        valueField    : 'extension_id',
                        mode          : 'remote', 
                        //pageSize      : 20,
                        triggerAction : 'query',  
                        typeAhead     : true,                    
                        store         : remoteStore,
                        anchor        : '95%'

组合工作在本地加载,但是当我切换到远程时,它仍然是空白的。

返回JSON的我的ASP.NET页面是这样的:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Clear();
    Response.Write(GetRemote());
}

5 个答案:

答案 0 :(得分:2)

在远程存储上,组合默认其minChars属性为4,因此只有在键入4个字符后才会发送查询。设置minChars几乎可以提供所需的行为。

我说几乎是因为即使自动完成所寻找的项目在当前页面中,仍然会发送新的服务器查询,将选择默认为新页面中的第一项。

答案 1 :(得分:1)

您在上面配置商店的方式,ASP脚本的结果应该是这样的:

{"extensionList": [
  {"extension_id": 1, "extension": "js"},
  {"extension_id": 2, "extension": "aspx"}
]}

如果它看起来不像那样,你的远程商店将找不到任何东西。

答案 2 :(得分:0)

您可以参考此问题ExtJS combobox problem in IE

答案 3 :(得分:0)

有几件事。首先,这样做:

remoteStore.loadData(<%= GetRemote()%>);

你实际上并没有通过javascript拨打远程电话。您正在回应在渲染时中直接调用GetRemote服务器函数到页面的结果。可能不是你想要的?如果GetRemote正在写出您的组合数据(并且它正常工作),那么您应该能够使用本地数据的组合设置。如果真的要进行远程调用,那么您需要删除服务器标签并通过代理URL加载数据,如Ext附带的几个示例所示。

另一件事是您的Page_Load代码实际上并未显示有关如何加载,格式化或返回数据的任何信息。我建议查看源代码并验证您的标记实际上是否被您期望的数据替换。如果/当您将其切换为真正的远程调用以加载数据时,您可以使用Firebug检查XHR调用并验证数据是否以此方式传输。

答案 4 :(得分:-1)

您必须设置代理,即设置

proxy: new ScriptTagProxy

远程加载'store'的属性。查看具体语法的示例。

编辑:因为您正在使用JsonStore快捷方式,请忽略我之前的注释。

尝试将所有这些属性应用于您的组合:

   typeAhead: true,
   typeAheadDelay: 500,
   triggerAction: 'all',
   selectOnFocus:true,

请不要对服务器端的记录进行预取(使用loadData)。它非常伤害内部过滤器,因此您可以使用来自不同预取的过滤记录。 另一方面,如果您在服务器端预取所有记录,为什么还需要对组合进行远程访问?!