简体   繁体   English

填充下拉菜单-从服务器中选择的选项

[英]Populating dropdown menu - selected option from server

I am currently using knockout.js framework. 我目前正在使用基因敲除框架。 I have taken a basic contacts form example and modified it to my own needs. 我以一个基本的联系表为例 ,并根据自己的需要对其进行了修改。 Each contact person has a status of ACTIVE or INACTIVE . 每个联系人都有的状态ACTIVEINACTIVE In the status dropdown menu, I would like to show the selected status for the contact. 在状态下拉菜单中,我想显示联系人的选定状态。 Instead of getting two options, I am getting an usual select option list. 我没有得到两个选项,而是得到了一个通常的选择选项列表。 How can I properly display a dropdown menu in knockout.js? 我怎样才能正确地显示敲门菜单中的下拉菜单? DEMO DEMO

Edit per @haim770: 根据@ haim770编辑:

    var ContactsModel = function (contacts) {
    var self = this;
    self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) {
    return {
            firstName: contact.firstName,
            lastName: contact.lastName,
            selectedOptionValue : contact.selectedOptionValue,
            phone: contact.phone,
            alt_phone: contact.alt_phone,
            main1: ko.observable(contact.main1),
            main2: ko.observable(contact.main2)
        };
    }));

    self.statusList = ['ACTIVE', 'INACTIVE'];

    self.addContact = function () {
        self.contacts.push({
            firstName: "",
            lastName: "",
            selectedOptionValue : ko.observable("ACTIVE"),
            phone: "",
            alt_phone: "",
            main1: false,
            main2: false
        });
    };

    self.removeContact = function (contact) {
        self.contacts.remove(contact);
    };

    self.addPhone = function (contact) {
        contact.phones.push({
            number: ""
        });
    };

    self.removePhone = function (phone) {
        $.each(self.contacts(), function () {
            this.phones.remove(phone)
        })
    };

    self.save = function () {
            self.lastSavedJson(JSON.stringify(ko.toJS(self.contacts), null, 2));
        };


    self.lastSavedJson = ko.observable("");


};

$.getJSON("functions/getPerson.php", function(allData) {
          ko.applyBindings(new ContactsModel(allData));
});

HTML HTML

<li>
<select data-bind="options: $root.statusList, value: selectedOptionValue"></select>
</li>

JSON JSON

[{"firstName":"James","lastName":"Southerland","phone":"1234567890","statusList":"ACTIVE","alt_phone":"1234567890","main1":true,"main2":false},{"firstName":"Tina","lastName":"Turner","phone":"1234567890","statusList":"INACTIVE","alt_phone":"1234567890","main1":false,"main2":true}]

1. The JSON returned from the server is malformed. 1.从服务器返回的JSON格式错误。 Instead of setting the actual contact status in the selectedOptionValue (as you do in your addContact method), you return it as statusOptionValues field. 而不是在selectedOptionValue中设置实际的联系人状态(就像在addContact方法中那样),而是将其作为statusOptionValues字段返回。

2. No need to include the 'Active/Inactive' array ( statusOptionValues ) in every contact. 2.无需在每个联系人中包含“有效/无效”数组( statusOptionValues )。 Try this: 尝试这个:

self.statusList = ['ACTIVE', 'INACTIVE'];

Then change your binding declarations appropriately: 然后适当地更改您的绑定声明:

<select data-bind="options: $root.statusList, value: selectedOptionValue"></select>

3. You better rely on a boolean field instead of array of string : 3.您最好依靠boolean字段而不是string数组:

contact.isActive = ko.observable(true);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM