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" 来自 FiteringSelectstore.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

});

对于每个 getputadd 和另一种方法

查看此 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

我可以建议您的可能解决方案是

  1. 使用Select小部件

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

  3. 使用JSON请求从远程服务器预加载所有数据,并将其添加到内存存储,然后轻松使用它.然后,您可以毫无问题地使用 FilteringSelect