Dojo: Не удается обновить выпадающий список после добавления новой группы - PullRequest
2 голосов
/ 06 февраля 2012

Я играл с руководством IBM по этой ссылке.

http://www.ibm.com/developerworks/web/tutorials/wa-dojotoolkit/section6.html

Пока что я очень хорошо справился, но у меня не получается получить выпадающий список для заполнения новой записи группы. Даже оригинальный код не работает.

    //Refresh the data store for the groups dropdown (in case groups added, edited or deleted)
function refreshGroupDropDown() {
    var theStore = dijit.byId("edit_contact_group").store;
    theStore.close();
    theStore.url = "data/groups.php";
    theStore.fetch();
}

Спасибо!

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

    //Refresh the data store for the groups dropdown (in case groups added, edited or deleted)
function refreshGroupDropDown() {
    var new_store = new ItemFileReadStore({url: 'data/groups.php' , clearOnClose: true});
    var theStore = dijit.byId("edit_contact_group");
    theStore.store = new_store;
    theStore.close();
    theStore.fetch();

}

    //Clears the "Edit Contact" form, sets it up for adding a new contact
function newContact() {
    var contact = contactsGrid.selection.getSelected()[0];
    refreshGroupDropDown();
    dojo.byId("edit_contact_real_id").value = "";
    dojo.byId("edit_contact_id").value = "[NEW]";
    dijit.byId("edit_contact_group").reset();
    dijit.byId("edit_contact_first_name").reset();
    dijit.byId("edit_contact_last_name").reset();
    dijit.byId("edit_contact_email_address").reset();
    dijit.byId("edit_contact_home_phone").reset();
    dijit.byId("edit_contact_work_phone").reset();


    dijit.byId("editContactDialog").set("title", "New Contact");
    dijit.byId("editContactDialog").show();
}

    //Process the adding of a new group to the database
function doNewGroup(e) {
    e.preventDefault();
    e.stopPropagation();
    dojo.byId("new_group_ajax").value = "1";
    if(this.isValid()) {
        dojo.xhrPost({
            form: this.domNode,
            handleAs: "json",
            load: function(data) {
                if(data.success) {
                    okDialog.set("title","Group created successfully");
                    okDialogMsg.innerHTML = "The group <strong>"+data.name+"</strong> was created successfully.";

                    groupsStore.newItem({"id":data.id.toString(),"name":data.name}, {"parent": groupsModel.root, "attribute":"groups"});
                    groupsStore.save();

                    newGroupDialog.hide();
                    okDialog.show();
                }
                else {
                    okDialog.set("title","Error creating group");
                    okDialogMsg.innerHTML = data.error;
                    okDialog.show();
                }
            },
            error: function(error) {
                okDialog.set("title","Error creating group");
                okDialogMsg.innerHTML = error;
                okDialog.show();
            }
        });
    }
}

Надеюсь, это поможет! Я новичок, поэтому любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Я понял это!Проблема была с index.html.Тег ввода для раскрывающегося списка групп выглядит следующим образом

<input dojoType="dijit.form.FilteringSelect" name="move_contact_new" store="groupsStore" searchAttr="name" query="{type:'node'}" id="move_contact_new" required="true" style="margin-bottom: 6px" />

Атрибут запроса никогда не задавался правильно.После того как я удалил query = "{type: 'node'}", группы повторно заполняются после добавления, редактирования или удаления групп.

Ответ новичка на вопрос новичка.

Надеюсь, что это может помочь любому новичку.

0 голосов
/ 06 февраля 2012

Судя по тому, что вы написали, единственная проблема, которую я вижу, это строка var theStore = dijit.byId("edit_contact_group").store;, поскольку она не создает хранилище данных. Вы должны убедиться, что вы также включили что-то вроде `var edit_contact_group = new dojo.data.ItemFileReadStore(); или его эквивалент. В противном случае, вы подключили функцию refreshGroupDropDown () к соответствующему событию («onclick» или как-то еще) с помощью dojo.connect ()? Вы загрузили функцию refreshGroupDropDown (), используя dojo.ready? то есть. dojo.ready(function(){refreshGroupDropDown();}); Это всегда первое, что приходит на ум ...

...