Шаблон 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 Селектор, этот предыдущий элемент получает другой.

Другие вопросы по тегам