Как динамически добавить виджет Dijit в форму Dojo? - PullRequest
2 голосов
/ 30 июня 2010

Я пытаюсь динамически добавить новый виджет FilteringSelect в существующую форму, которую я сделал из декларативных тегов (при загрузке страницы).

prereqs = 0;
function addAnotherPrerequisite(){  

    var newPreReqCursor = dijit.byId("Prerequisite"+(prereqs-1)).domNode;
    dojo.create("input",{
        id:"prerequisite"+prereqs,
        jsId:"Prerequisite"+prereqs,                        
        dojoType:"dijit.form.FilteringSelect",
        store:"PrerequisitesStore",
        searchAttr:"name",
        style:"width: 350px;",
        required:"true",
        class: "appendedPreReq"},newPreReqCursor,"after");


    dojo.parser.parse( newPreReqCursor.parentNode ); 

    prereqs++;
}

Этот код правильно создает виджет FilteringSelect, но виджет не зарегистрирован в форме. Всякий раз, когда я отправляю форму, ни одно из значений в новых виджетах не появляется. Атрибут проверки работает, однако, и он правильно извлекает значения из хранилища. Я даже могу вызвать новый виджет через его jsId (Prerequisite1, Prerequisite2 и т. Д.). Он просто не будет POST!

Вместо dojo.create я также попытался вызвать виджет FilteringSelect напрямую. Это также сделало виджет, но не зарегистрировало значения в форме во время POSTing.

var filteringSelect = new dijit.form.FilteringSelect({
        id: "prereq"+prereqs,
        jsId: "Prerequisite"+prereqs,
        store: PrerequisitesStore,
        searchAttr: "name",
        required: true,
        style: 'width: 350px;',
        class: 'appendedPreReq'
    },
    "prerequisite"+prereqs).startup();

Я схожу с ума, пытаясь понять это.

Ответы [ 3 ]

1 голос
/ 01 июля 2010

Так что, похоже, есть какая-то ошибка или что-то в этом роде.Мне пришлось явно определить атрибут name, чтобы виджет отображался в методе .getDependents () моей формы.Вот так dijit.forms получает свой список значений формы.После этого я также не смог получить доступ к этому виджету с помощью dijit.byId (ничего не возвращал, молча уловил ошибку, которую я предполагаю), поэтому я возвратил объект через его jsId с eval.

0 голосов
/ 10 мая 2011

да, при создании виджетов, как сказал Евгений Лазуткин, скрытый тип ввода, связанный с выбранным фильтром, получает имя с идентификатором, а также корректно обновляется значение скрытого поля.Но когда выбор фильтра создается методом .create (), нам нужно дать имя, а также значение скрытого поля не обновляется после того, как мы выбираем некоторые значения из выбора фильтрации (даже когда мы размываем).Евгений Лазуткин, подскажите, почему так происходит ... как обновить значение скрытого поля в методе .create ().

0 голосов
/ 30 июня 2010

Это очень легко.Просто создайте новый объект, подобный этому:

// first let's create an empty node (you can reuse the existing one)
var node = dojo.create("div", {
  // all necessary node attributes
  className: "appendedPreReq",
  style: {
    width: "350px"
  }
}, "myAnchorNodeId", "after");

// now let's create a widget
var widget = new dijit.form.FilteringSelect(
  {
    // all necessary widget properties
    id: "prereq" + prereqs,
    store: PrerequisitesStore,
    searchAttr: "name",
    required: true
  },
  node // optional node to replace with the widget
);

Узнайте все об этом:

...