【发布时间】:2014-08-04 14:44:30
【问题描述】:
示例取自knockout tutorials - working with lists and collections。
<table>
<thead>
<tr>
<th>Passenger name</th>
<th>Meal</th>
<th>Surcharge</th>
<th></th>
</tr>
</thead>
<!-- Todo: Generate table body -->
<tbody data-bind="foreach: seats">
<tr>
<td>
<input data-bind="value: name" />
</td>
<td>
<select data-bind="options: $root.availableMeals, value: meal, optionsText: 'mealName'"></select>
</td>
<td data-bind="text: formattedPrice"></td>
</td>
</tr>
</tbody>
</table>
<button data-bind="click: addSeat">Reserve another seat</button>
ReservationsViewModel() 将一行元素动态添加到静态table on button(保留另一个座位)单击绑定到addSeat 和click 事件侦听器。
function ReservationsViewModel() {
var self = this;
...
self.addSeat = function () {
self.seats.push(new SeatReservation("", self.availableMeals[0]));
}
...
}
致电SeatReservation()
function SeatReservation(name, initialMeal) {
var self = this;
self.name = name;
self.meal = ko.observable(initialMeal);
}
如何从SeatReservation()中的DOM(不是点击的元素)中检索添加的元素。
编辑:据我了解淘汰赛的foreach 绑定,它重复子元素。我想要实现的是,一旦将这些元素添加到 DOM 中,就可以访问它们。
【问题讨论】:
-
hmm...
new SeatReservation (...).meal是否包含您要查找的元素?如果你有参考的话,去 dom 是没有意义的 -
我不认为 downvoter 是地球上最快的阅读器。
-
@KevinB 它绑定到
foreach循环。它遍历一个数组,然后添加元素。编辑:我是新来的淘汰赛,我不知道谁来检索添加的元素。我不想要整个元素,我想要点击“预订另一个座位”时添加的元素。 -
您不应该真正访问 DOM。你为什么要这么做?
-
如果你需要增强它,首选的方法是创建一个custom binding handler,它可以让你访问DOM元素