DOJO JsonRest - 在onClick之后无法更改目标URL

时间:2016-02-03 06:44:22

标签: javascript dojo

我使用FilteringSelect

var jsonStore = new JsonRest  ({
    target: "/ajax_script/autocomplete?term1=" + foo1 + "&term2=" + foo2
});

但是当我点击一个将term2的值更改为foo3的按钮时,target始终保留为foo2

我可以在控制台中看到term2的值确实已更改为foo3jsonStore实例化之前和之后,所以我想知道如果以某种方式缓存jsonStore对象。

这是target的不当使用吗?有没有办法绕过这个,或者可能是替代方案?

编辑Harpreet的答案

我确实尝试过将params传递给target网址的方法,但我发现它与FilteringSelect不兼容。

我对FilteringSelect的理解是它将searchAttr属性值传递给JsonRest网址,因此,如果我的searchAttr是" term",则输入的数据在来自用户的输入中(通过FilteringSelect)然后传递为" term = someusrinput"。

在我的情况下,我需要传递更多参数,但使用store.query()会产生对JsonRest网址的单独请求,该请求也不会包含" term"来自FiteringSelectstore.query请求包括" term1,term2,term3"参数失败,因为它没有包含" term" (来自FilteringSelect),然后FilteringSelect请求包含" term",这会失败,因为它不包括" term1,term2,term3"!

我需要将其他参数传递给target网址,这可以通过使用查询字符串修改target网址来实现 - 传递FilteringSelect字词并与查询字符串变量结合使用

我面临的问题是我无法重新查询"通过JsonRest通过onClick修改查询字符串的新参数。

1 个答案:

答案 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 term1term2附加到每个getputadd和其他方法的父网址

检查此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,您可以使用它来玩游戏并使用控制台检查您的结果

选中此Another Question From SO

我建议你的可能解决方案

  1. 使用选择小部件

  2. 根据您的要求修改 - JsonRestStore

  3. 使用JSON请求从远程服务器预加载所有数据,并将其添加到内存存储中,然后使用它而不会头疼。然后,您可以使用 FilteringSelect ,而不会出现任何问题。