在linked JS Fiddle中,我有一個包含2個聯繫對象的列表,以及加載頁面時的空active_contact對象。當點擊聯繫人列表下方的「激活」鏈接時,我希望該聯繫人的屬性填充活動的聯繫人輸入字段。目前,我填充active_contact對象的函數正在觸發,並且該值按預期方式填充,但未顯示在頁面上(檢查元素時,輸入字段甚至未顯示在代碼中)。在初始頁面加載後填充時出現綁定元素
值得一提的是這是我第一次使用Knockout,所以完全有可能我缺少一些非常基本的東西。
代碼:
HTML
var initialData = [
{ firstName: "Danny", lastName: "LaRusso", phones: [
{ type: "Mobile", number: "(555) 121-2121" },
{ type: "Home", number: "(555) 123-4567"}]
},
{ firstName: "Sensei", lastName: "Miyagi", phones: [
{ type: "Mobile", number: "(555) 444-2222" },
{ type: "Home", number: "(555) 999-1212"}]
}
];
var ContactsModel = function(contacts) {
var self = this;
self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function(contact) {
return { firstName: contact.firstName, lastName: contact.lastName, phones: ko.observableArray(contact.phones) };
}));
self.active_contact = ko.observable();
self.makeActive = function(firstName){
for(var i in self.contacts()){
\t \t \t if(self.contacts()[i].firstName == this.firstName){
console.log(self.contacts()[i]);
\t \t \t \t self.active_contact = self.contacts()[i];
\t \t \t }
\t \t }
}
};
ko.applyBindings(new ContactsModel(initialData));
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div class='liveExample'>
<h2>Contacts</h2>
<div id='contactsList'>
<h3>active contact: </h3>
<div class="active" data-bind="with: active_contact">
<input type="text" data-bind="value: firstName" />
<input type="text" data-bind="value: lastName" />
</div>
<table class='contactsEditor'>
<tr>
<th>First name</th>
<th>Last name</th>
<th>Phone numbers</th>
</tr>
<tbody data-bind="foreach: contacts">
<tr>
<td>
<input data-bind='value: firstName' />
<div><a href='#' data-bind='click: $root.makeActive'>Make Active</a></div>
</td>
<td><input data-bind='value: lastName' /></td>
<td>
<table>
<tbody data-bind="foreach: phones">
<tr>
<td><input data-bind='value: type' /></td>
<td><input data-bind='value: number' /></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>
感謝您的答覆尼克,那不解決這個問題,因爲我提出的,但寫的問題時,我自己撲空。我修改了淘汰賽文檔中的一個示例來隔離此特定問題。在我的實際應用程序中,我需要根據選定對象的各種屬性填充多個表單域。將編輯該問題。 – ctrane