2012-02-05 2 views
2

Я поиграл с учебником IBM по этой ссылке.Dojo: не удается обновить выпадающий список после добавления новой группы

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

Я понял! Проблема была в 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

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

Смежные вопросы