1

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());
   }));
}));
4

1 に答える 1

1

値を設定する代わりに、項目を設定しようとしましたfilteringSelect.set("item", newItem)か? ID や表示された値だけでなく、項目全体を指定する必要があることに注意してください。

そのため、アイテムをストアにプッシュしてから、FilteringSelect でアイテムを設定します。

this.liftStore.data.push(newItem);
this.lift.set("item", newItem);
于 2012-05-08T21:19:40.283 に答える