モデルの一部のドロップダウン リストが正しくバインドされないという問題があります。何が間違っているのかわかりません。問題なくバインドされている単純化されたサンプルがあります。しかし、完全版では、ドロップダウンリストには「未定義」とだけ表示されています。
このモデルは「従業員」用であり、「連絡先」の一連のモデルが関連付けられています。関連するビットは次のようになります。
var EmployeeViewModel = function() {
var self = this;
self.TypesOfContact = ko.observableArray(['Phone Number', 'Website', 'Messaging', 'Address', 'Email Address']);
self.ContactDetails = ko.observableArray();
self.ContactDetails().push(new ContactDetail(self.TypesOfContact()[0], 'Home Phone', '', '', '', '', '', '', ''));
/* snip a bunch of other properties */
};
ContactDetail の関連ビットは次のようになります。
var ContactDetail = function(contactType, addressType, contactField, address1, address2, address3, city, state, postalCode) {
var self = this;
self.ContactType = ko.observable(contactType);
/* snip a bunch of other properties */
};
関連する HTML のビットは次のようになります。
<div class='row' data-bind="foreach: ContactDetails">
<div class='small-3 columns '>
<label>
Contact Type
<select id="ContactTypeSelect" data-bind='options: $root.TypesOfContact'>
</select>
</label>
</div>
<div class='small-9 columns '>
</div>
</div>
他のプロパティは問題なくバインドされます。
私がこれを行う場合:
ko.applyBindings(new EmployeeViewModel());
そしてこれ:
var x = ko.contextFor(document.getElementById("ContactTypeSelect"));
次に、 x.$root.TypesOfContact() は、表示されると予想されるすべてのアイテムを含む Array[6] です。x.$data.ContactType() は「電話番号」です。
ただし、表示される HTML は「未定義」と表示されたドロップダウン ボックスであり、レンダリングされた HTML は次のようになります。
<div class="small-3 columns ">
<label>
Contact Type
<select id="ContactTypeSelect" data-bind="options: $root.TypesOfContact" class="hidden-field" data-id="1375296525390-hq3U3">
<option value="Phone Number">Phone Number</option>
<option value="Website">Website</option>
<option value="Messaging">Messaging</option>
<option value="Address">Address</option>
<option value="Email Address">Email Address</option>
<option value="Phone Number">Phone Number</option>
</select><div class="custom dropdown" data-id="1375296525390-hq3U3"><a href="#" class="current">undefined</a><a href="#"
class="selector"></a><ul></ul>
</div>
</label>
</div>
元のマークアップを次のように変更すると:
<select id="ContactTypeSelect" data-bind='options: $root.TypesOfContact, value:ContactType'></select>
違いはありません。それでも未定義と言います。
私は何が欠けていますか?