这是我第一次尝试使用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());
}
答案 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)。它非常伤害内部过滤器,因此您可以使用来自不同预取的过滤记录。 另一方面,如果您在服务器端预取所有记录,为什么还需要对组合进行远程访问?!