Dojo:添加新组后无法更新下拉列表

时间:2012-02-05 21:52:16

标签: dojo drop-down-menu

我在这个链接上一直在玩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 个答案:

答案 0 :(得分: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'}”后,组会在添加,编辑或删除组后重新填充。

初学者问题的初学者答案。

希望这可以帮助任何初学者。

答案 1 :(得分:0)

根据您发布的内容,我看到的唯一问题是使用行var theStore = dijit.byId("edit_contact_group").store;,因为它没有实际创建dataStore。您需要确保还包含`var edit_contact_group = new dojo.data.ItemFileReadStore();或类似内容。是的,您是否已使用dojo.connect()将refreshGroupDropDown()函数连接到适当的事件('onclick'或其他)?你是否使用dojo.ready加载了函数refreshGroupDropDown()?即。 dojo.ready(function(){refreshGroupDropDown();});这些始终是我想到的第一件事......