0

这是我第一次使用 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());
}
4

5 回答 5

2

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

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

于 2009-05-17T13:13:49.047 回答
1

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

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

如果看起来不是这样,您的远程商店将找不到任何东西。

于 2009-06-04T08:31:17.413 回答
0

可以参考这个问题ExtJS combobox question in IE

于 2009-05-17T10:10:19.300 回答
0

几件事。首先,当这样做时:

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

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

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

于 2009-05-18T16:15:40.777 回答
-1

你必须设置一个代理,即设置

proxy: new ScriptTagProxy

远程加载“商店”的属性。查看示例以了解确切的语法。

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

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

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

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

于 2009-05-17T11:08:41.610 回答