DOJO JsonRest - onClick 后无法更改目标 URL
DOJO JsonRest - Unable to Alter Target URL After onClick
我正在与 FilteringSelect
合作:
var jsonStore = new JsonRest ({
target: "/ajax_script/autocomplete?term1=" + foo1 + "&term2=" + foo2
});
但是当我单击一个按钮将 term2
的值更改为 foo3
时,target
始终与 foo2
保持一致。
我可以在控制台中看到 term2
的值确实更改为 foo3
,在 jsonStore
实例化之前和之后,所以我想知道是否 jsonStore对象以某种方式缓存。
这是对 target
的不当使用吗?有没有办法解决这个问题,或者可能有其他选择?
编辑 Harpreet 的回答
我确实尝试过这种将参数传递给 target
url 的方法,但我发现它与 FilteringSelect
.
不兼容
我对FilteringSelect
的理解是,它把searchAttr
属性的值传递给了JsonRestURL,所以如果我的searchAttr
是"term",用户输入的数据(通过 FilteringSelect
)然后作为 "term=someusrinput".
传递
在我的例子中,我需要传递更多参数,但是使用 store.query()
会导致对 JsonRest
URL 的单独请求,其中也不包括 "term" 来自 FiteringSelect
。 store.query
请求包含 "term1, term2, term3" 参数,失败是因为它不包含 "term"(来自 FilteringSelect
)然后 FilteringSelect
请求包含 "term",它失败了,因为它不包括 "term1, term2,term3"!
我需要将其他参数传递给 target
URL,它通过使用查询字符串修改 target
URL 来工作 - FilteringSelect
术语被传递并与查询字符串变量组合。
我面临的问题是我无法通过 JsonRest
"re-query" 使用通过 onClick
.
修改的查询字符串的新参数
这不是将参数附加到 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
});
对于每个 get
、put
、add
和另一种方法
查看此 example
的结果请求 URL
编辑
FilteringSelect + JSONRestStore
过滤Select无法实现您想要实现的目标。为此你应该使用 Select.
Issue is FilteringSelect appends *
at each word you type in the
Textbox of FilteringSelect. eg: if you type k
it will become k*
. When it is passed to JsonRestStore for query it will not
treat it as special input and will not modify it for intelligent
search but use it as exact Pattern you want to match wtth the result.
var query = {
valueToSearch: "k*"
}
and your Url become: example.com?valueToSearch=k*
"k*" == "kite" //false
而不是 使用 FileringSelect 你应该使用 Select 然后你的查询将是
var query = {
valueToSearch: "kite"
}
and your Url become: example.com?valueToSearch=kite
kite == kite //true, as "kite" will current selected value, not entered by user
我也创建了这个 jsFiddle,你可以使用它来玩玩并使用控制台的
检查你的结果
勾选这个Another Question From SO
我可以建议您的可能解决方案是
使用Select小部件
根据您的要求修改-JsonRestStore。
使用JSON请求从远程服务器预加载所有数据,并将其添加到内存存储,然后轻松使用它.然后,您可以毫无问题地使用 FilteringSelect。
我正在与 FilteringSelect
合作:
var jsonStore = new JsonRest ({
target: "/ajax_script/autocomplete?term1=" + foo1 + "&term2=" + foo2
});
但是当我单击一个按钮将 term2
的值更改为 foo3
时,target
始终与 foo2
保持一致。
我可以在控制台中看到 term2
的值确实更改为 foo3
,在 jsonStore
实例化之前和之后,所以我想知道是否 jsonStore对象以某种方式缓存。
这是对 target
的不当使用吗?有没有办法解决这个问题,或者可能有其他选择?
编辑 Harpreet 的回答
我确实尝试过这种将参数传递给 target
url 的方法,但我发现它与 FilteringSelect
.
我对FilteringSelect
的理解是,它把searchAttr
属性的值传递给了JsonRestURL,所以如果我的searchAttr
是"term",用户输入的数据(通过 FilteringSelect
)然后作为 "term=someusrinput".
在我的例子中,我需要传递更多参数,但是使用 store.query()
会导致对 JsonRest
URL 的单独请求,其中也不包括 "term" 来自 FiteringSelect
。 store.query
请求包含 "term1, term2, term3" 参数,失败是因为它不包含 "term"(来自 FilteringSelect
)然后 FilteringSelect
请求包含 "term",它失败了,因为它不包括 "term1, term2,term3"!
我需要将其他参数传递给 target
URL,它通过使用查询字符串修改 target
URL 来工作 - FilteringSelect
术语被传递并与查询字符串变量组合。
我面临的问题是我无法通过 JsonRest
"re-query" 使用通过 onClick
.
这不是将参数附加到 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
});
对于每个 get
、put
、add
和另一种方法
查看此 example
的结果请求 URL编辑
FilteringSelect + JSONRestStore
过滤Select无法实现您想要实现的目标。为此你应该使用 Select.
Issue is FilteringSelect appends
*
at each word you type in the Textbox of FilteringSelect. eg: if you typek
it will becomek*
. When it is passed to JsonRestStore for query it will not treat it as special input and will not modify it for intelligent search but use it as exact Pattern you want to match wtth the result.var query = { valueToSearch: "k*" }
and your Url become: example.com?valueToSearch=k*
"k*" == "kite" //false
而不是 使用 FileringSelect 你应该使用 Select 然后你的查询将是
var query = {
valueToSearch: "kite"
}
and your Url become: example.com?valueToSearch=kite
kite == kite //true, as "kite" will current selected value, not entered by user
我也创建了这个 jsFiddle,你可以使用它来玩玩并使用控制台的
检查你的结果勾选这个Another Question From SO
我可以建议您的可能解决方案是
使用Select小部件
根据您的要求修改-JsonRestStore。
使用JSON请求从远程服务器预加载所有数据,并将其添加到内存存储,然后轻松使用它.然后,您可以毫无问题地使用 FilteringSelect。