0

ドロップダウン コントロールを追加するときに発生した問題がある、 さまざまな種類のコントロール ( http://jsfiddle.net/gZC5k/993/ )を含むネストされたフォームに取り組んでいます。

HTMLにこれがあります

                        <tr class='person'>
                        <td>Gender</td>
                        <td>
                            <select data-bind="options: optionGender, value: gender"></select>
                        </td>
                    </tr>

そしてこれはモデルで

    self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) {
    return {
        firstName: ko.observable(contact.firstName),
        lastName: ko.observable(contact.lastName),
        isKey: ko.observable(contact.isKey),
        gender: ko.observable(contact.gender),
        phones: ko.observableArray(ko.utils.arrayMap(contact.phones, function (phone) {
            return {
                type: ko.observable(phone.type),
                number: ko.observable(phone.number),
                calls: ko.observableArray(phone.calls)
            };
        })),
        addresses: ko.observableArray(contact.addresses),
        optionGender: ["Male", "Female"]
    };
}));

self.addContact = function () {
    self.contacts.push({
        firstName: "",
        lastName: "",
        isKey: "false",
        gender: "Female",
        phones: ko.observableArray(),
        addresses: ko.observableArray()
    });
};

最初にデータをロードすると、すべての値を編集でき、対応する JSON は問題ありません。新しい Person を追加すると、問題が発生します。

性別フィールドに関連するすべてのものを削除すると、フォームは正常に機能します ( http://jsfiddle.net/gZC5k/995/を参照)。私はそれを置くことの問題だと思います

            optionGender: ["Male", "Female"],

間違った場所にありますが、どこにあるべきかわかりません。

4

1 に答える 1

0

addContact 関数( http://jsfiddle.net/gZC5k/997/)で optionGender を繰り返して見つけたと思いました

var optionGender = [
"Male",
"Female"];

var ContactsModel = function (contacts) {
var self = this;
self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) {
    return {
        firstName: ko.observable(contact.firstName),
        lastName: ko.observable(contact.lastName),
        isKey: ko.observable(contact.isKey),
        gender: ko.observable(contact.gender),
        phones: ko.observableArray(ko.utils.arrayMap(contact.phones, function (phone) {
            return {
                type: ko.observable(phone.type),
                number: ko.observable(phone.number),
                calls: ko.observableArray(phone.calls)
            };
        })),
        addresses: ko.observableArray(contact.addresses),
        optionGender: optionGender,
    };
}));

self.addContact = function () {
    self.contacts.push({
        firstName: ko.observable(""),
        lastName: ko.observable(""),
        isKey: ko.observable("true"),
        gender: ko.observable("Female"),
        optionGender: optionGender,
        phones: ko.observableArray(),
        addresses: ko.observableArray()
    });
};

しかし、これにより、次のように、結果のJSONにオプションリストが含まれます

[
{
"firstName": "",
"lastName": "",
"isKey": "true",
"gender": "Male",
"optionGender": [
  "Male",
  "Female"
],
"phones": [],
"addresses": []
},
{
"firstName": "",
"lastName": "",
"isKey": "true",
"gender": "Female",
"optionGender": [
  "Male",
  "Female"
],
"phones": [],
"addresses": []
}
]

だから私はまだ解決策を探しています..

于 2013-02-25T22:33:42.313 に答える