我正在創建一個會議出席管理器,並且信息正被保存到我們的數據庫中。我的登錄表單上有一個名爲「Attendee Type」的下拉選擇列表,其中包含從名爲attendeeTypes的可觀察數組填充的值。與會者類型充滿
{ID:1,產品名稱: 「父」}形式的對象
{ID:2,產品名稱: 「員工」},等等。現在Knockout JS設置從可觀察數組對象屬性值下拉的初始值
,在我的表中的行也通過在可觀察數組上運行foreach來動態創建,以滿足使用者。
與會者 self.meetingAttendees = ko.observableArray([{ AttendeeTypeId: ko.observable(1),<br> AttendeeNames: ko.observableArray([{ Name: "Marlin" }, { Name: "Dory" }]),<br> AttendeeSiteNumber: ko.observable(40), <br>StudentNames: ko.observableArray([{ Name: "P. Sherman" }, { Name: "42 Wallaby Way" }, { Name: "Sydney" }]), <br>Email: ko.observable("[email protected]"), <br>Telephone: ko.observable("559-222-5555") }
正如你可以看到,表中的每一行中有一個attendeeTypeId。如果此值是預填充的,就像它在這裏一樣,我希望下拉菜單切換到適當的值。這將有助於在發生刷新時保存數據。
我的HTML:
<table class="table table-responsive table-condensed table-bordered table-striped"> <thead> <tr> <th class="attendeeTypeCol">Attendee Type</th> <th class="attendeeNameCol">Attendee Name(s)</th> <th class="schoolNameCol">School Name</th> <th class="studentNameCol">Student Name</th> <th class="emailCol">E-Mail Address</th> <th class="telephoneCol">Telephone Number</th> </tr> </thead> <tbody data-bind="foreach: $root.meetingAttendees"> <tr> <td class="attendeeTypeCol"> <select style="margin-right: 15px;" data-bind="options: $root.attendeeTypes, optionsText: 'Name',value: $root.meetingAttendees()[$index()].AttendeeTypeId,optionsValue: 'Id', optionsCaption: 'I am a(n)...'"> </select> <span data-bind="text:$index()"></span> <span data-bind="text:$root.meetingAttendees()[$index()].AttendeeTypeId()"></span> </td> ... </tr> </tbody> </table>
我有兩個調試跨越,讓我總能看到的$值root.meetingAttendees()[$指數()] AttendeeTypeId()。當我從下拉列表中選擇一個值時,該值會進行相應的更新和更改,因此我確信它正在查找正確的位置,但在初始加載時,值綁定不會將下拉列表設置爲適當的選項。它實際上將該變量設置爲默認的「未定義」。
有沒有人有任何想法,我可以如何讓下拉菜單從$ root.meetingAttendees()[$ index()]中的Id中設置適當的值。AttendeeTypeId()?
我無法在一個更簡單的提琴手https://jsfiddle.net/y51r3x9g/1/上重現您的問題......您可以看看您是否可以在那裏重現它? –
我在這裏更新了那個小提琴。 https://開頭的jsfiddle。net/y51r3x9g/5/ 在這裏,它正在工作。但我已經把我的整個JS留在了那裏。我在想可能會出現比賽狀況? 此外,我在Knockout 3.3.0,如果這有所作爲。 –
經過進一步的調試,我發現問題的根源。這是我的ajax調用self.getAttendeeTypes。它不喜歡我清空並重新插入值。它以某種方式混淆了綁定。所以我想這就是解決方案所在的地方 –