我使用FilteringSelect
:
var jsonStore = new JsonRest ({
target: "/ajax_script/autocomplete?term1=" + foo1 + "&term2=" + foo2
});
但是当我点击一个将term2
的值更改为foo3
的按钮时,target
始终保留为foo2
。
我可以在控制台中看到term2
的值确实已更改为foo3
,jsonStore
实例化之前和之后,所以我想知道如果以某种方式缓存jsonStore对象。
这是target
的不当使用吗?有没有办法绕过这个,或者可能是替代方案?
编辑Harpreet的答案
我确实尝试过将params传递给target
网址的方法,但我发现它与FilteringSelect
不兼容。
我对FilteringSelect
的理解是它将searchAttr
属性值传递给JsonRest网址,因此,如果我的searchAttr
是" term",则输入的数据在来自用户的输入中(通过FilteringSelect
)然后传递为" term = someusrinput"。
在我的情况下,我需要传递更多参数,但使用store.query()
会产生对JsonRest
网址的单独请求,该请求也不会包含" term"来自FiteringSelect
。 store.query
请求包括" term1,term2,term3"参数失败,因为它没有包含" term" (来自FilteringSelect
),然后FilteringSelect
请求包含" term",这会失败,因为它不包括" term1,term2,term3"!
我需要将其他参数传递给target
网址,这可以通过使用查询字符串修改target
网址来实现 - 传递FilteringSelect
字词并与查询字符串变量结合使用
我面临的问题是我无法重新查询"通过JsonRest
通过onClick
修改查询字符串的新参数。
答案 0 :(得分:1)
这不是将params附加到URL的正确方法。
您无需修改目标。
检查此示例
require(["dojo/store/JsonRest"], function(JsonRest) {
var store = new JsonRest({
target: "/ajax_script/autocomplete"
});
store.query({
term1: "foo1",
term2: "foo2",
}, {});
//URL - "/ajax_script/autocomplete?term1=foo1&term2=foo2
});
Dojo会自动将params term1
和term2
附加到每个get
,put
,add
和其他方法的父网址
检查此example
的结果请求网址修改强>
FilteringSelect + JSONRestStore
使用 FilteringSelect 无法实现您的目标。为此,您应使用选择。
问题 FilteringSelect 会在您输入的每个字词后附加
*
FilteringSelect 的文本框。例如:如果您输入k
,它将变为k*
。当它传递给 JsonRestStore 查询时,它不会 将其视为特殊输入,不会为了智能而修改它 搜索,但将其用作您希望与结果匹配的精确模式。var query = { valueToSearch: "k*" }
您的网址成为: example.com?valueToSearch=k *
"k*" == "kite" //false
而不是使用 FileringSelect ,您应该使用选择,然后您的查询将
var query = {
valueToSearch: "kite"
}
您的网址成为: example.com?valueToSearch=kite
kite == kite // true,因为“kite”将是当前选定的值,不是由用户输入的
我还创建了这个jsFiddle,您可以使用它来玩游戏并使用控制台检查您的结果
我建议你的可能解决方案
使用选择小部件
根据您的要求修改 - JsonRestStore 。
使用JSON请求从远程服务器预加载所有数据,并将其添加到内存存储中,然后使用它而不会头疼。然后,您可以使用 FilteringSelect ,而不会出现任何问题。