Шаблон KendoUI с наблюдаемым с помощью NumericTextbox
У меня есть следующий шаблон KendoUI, связанный с наблюдаемым. Когда я помещаю новый элемент в наблюдаемый массив, как я могу применить kendoNumericTextBox только к новому элементу в шаблоне?
Если я подаю заявку по классу, это странным образом удваивает счетчики на существующих числовых текстовых полях.
<div id="slots">
<table class="table table-striped table-condensed" style="width:auto;">
<thead>
<tr>
<th>Date</th>
<th>Time</th>
<th>Volunteers Needed</th>
<th>
Reservation Passcode <i class="icon-question-sign" title ="Only people with the reservation passcode can signup."></i>
</th>
</tr>
</thead>
<tbody data-template="row-template" data-bind="source: slots">
</tbody>
</table>
</div>
$(document).ready(function () {
var viewModel = kendo.observable({
slots: [{DateText:'1/8/1969', ShiftLabel: "3:00 to 5:00",Slots:2,ReservationCode:"ABC" }]
});
kendo.bind($("#slots"), viewModel);
$(".numeric").kendoNumericTextBox({
format: "n0"
});
viewModel.slots.push({DateText:'1/8/1969', ShiftLabel: "3:00 to 5:00",Slots:2,ReservationCode:"ABC" });
$(".numeric").kendoNumericTextBox({
format: "n0"
});
});
Спасибо за любую помощь!
1 ответ
Попробуйте определить свой шаблон как:
<script type="text/x-kendo-tmpl" id="row-template">
<tr>
<td>#= DateText #</td>
<td>#= ShiftLabel #</td>
<td class="numeric"><input data-role="numerictextbox" data-format="n0" data-bind="value: Slots"></td>
<td>#= ReservationCode #</td>
</tr>
</script>
и удалите $(".numeric").kendoNumericTextBox(...)
инициализация. Делая это, вы должны иметь NumericTextBox
каждый раз, когда запускается шаблон (по одному в строке).
Ваш JavaScript такой:
$(document).ready(function () {
var viewModel = kendo.observable({
slots: [
{DateText: '1/8/1969', ShiftLabel: "3:00 to 5:00", Slots: 2, ReservationCode: "ABC" }
]
});
kendo.bind($("#slots"), viewModel);
viewModel.slots.push({DateText: '1/8/1969', ShiftLabel: "3:00 to 5:00", Slots: 3, ReservationCode: "ABC" });
});
Смотрите это работает здесь http://jsfiddle.net/OnaBai/BV48W/
Почему: тот факт, что вы используете класс CSS (.numeric
) в результате вы получите числовое текстовое поле KendoUI внутри другого.
Пример: у вас есть следующий HTML:
<label>Number 1: <input id="number1" class="numeric"/></label>
<label>Number 2: <input id="number2" class="numeric"/></label>
И JavaScript
$(document).ready(function () {
$(".numeric").kendoNumericTextBox({
format: "n0"
});
$(".numeric").kendoNumericTextBox({
format: "n0"
});
});
Вы увидите то, что вы назвали странным эффектом удвоения счетчиков на существующих числовых текстовых полях.
Каждый раз, когда вы вызываете kendoNumericTextBox
с помощью .numeric
селектор вы добавляете один дополнительный спиннер к элементу. Если у него нет счетчика (данные просто добавляются в viewModel
) он получает один, но если затем вы добавляете данные и вызываете kendoNumericTextBox
с помощью .numeric
Селектор, этот предыдущий элемент получает другой.