在已经创建之后在dijit / form / FilteringSelect上设置值

时间:2012-05-06 19:36:26

标签: dojo dijit.form

我使用FilteringSelect MemoryStore。当用户键入不在商店中的值时,系统会提示他们,询问他们是否要将新值添加到商店。 如果他们这样做,我们调用服务器,创建新项目,并在响应上,我们发布一个事件。

主题订阅者被通知创建了一个新项目并将其添加到MemoryStore,后者将选项添加到filteringselect。

此时,过滤选择仍具有相同的displayValue,并且选项中存在该选项。 FilteringSelect.get(“value”)仍然返回“”。

如果您要键入空格,然后点击退格键(最后使用相同的值),FilteringSelect.get("value")将返回正确的项ID。

FilteringSelect.set("value", data[0].id)没有做任何事情,没有抛出任何异常,没有任何影响。

这是代码,包含我尝试过的一些随机调用。

require(["dojo/store/Memory", "dojo/_base/array", "dojo/topic"],
  lang.hitch(this, function(Memory, array, topic) {
    this.liftStore = new Memory({
      data: []
    });
    array.forEach(data, lang.hitch(this, function(entry, i) {
      this.liftStore.data.push({
        name: entry.Name,
        id: entry.ID,
        identifier: entry.ID
      });
    }));
    this.lift.set("store", this.liftStore);
    topic.subscribe("LiftLog/NewLift", lang.hitch(this, function(data) {
      debugger;
      data[0].selected = true;
      data[0].identifier = data[0].id;
      this.liftStore.data.push(data[0]);
      this.lift.reset();
      this.lift.set("value", data[0].id);
      this.lift.set("value", data[0].id.toString());
   }));
}));

1 个答案:

答案 0 :(得分:1)

您是否尝试过设置项目(例如filteringSelect.set("item", newItem)而不是设置值?请注意,您应该为其指定整个项目,而不仅仅是ID或显示的值。

因此,将项目推入商店,然后在FilteringSelect上设置项目:

this.liftStore.data.push(newItem);
this.lift.set("item", newItem);