Переключатель и источник данных KendoUI Mobile

Я пытаюсь отобразить список элементов с помощью списка, например:

<div data-role="view" data-model="my_model">
    <ul data-role="listview" data-bind="source: ds" data-template="list-tmpl"></ul>
</div>

Где у меня есть view с использованием модели под названием my_model и listview, где source привязано к ds.

Моя модель что-то вроде:

var my_model = kendo.observable({
    ds: new kendo.data.DataSource({
        transport: {
            read: readData,
            update: updateData,
            create: updateData,
            remove: updateData
        },
        pageSize: 10,
        schema: {
            model: {
                id: "id",
                fields: {
                    id: { type: "number" },
                    name: { type: "string" },
                    active: { type: "boolean" }
                }
            }
        }
    })
});

Каждый элемент включает id, name (то есть string) и boolean с именем active.

Шаблон, используемый для отображения каждого элемента:

<script id="list-tmpl" type="text/kendo-tmpl">
    <span>#= name # : #= active #</span>
    <input data-role="switch" data-bind="checked: active"/>
</script>

Где я отображаю name и (для отладки) значение active. Кроме того, я визуализирую switch, привязанный к active.

Вы должны увидеть что-то вроде:

введите здесь описание изображения

Наблюдаемые проблемы:

  1. Если вы нажмете на переключатель, вы увидите, что значение active рядом с name меняет свое значение (как и ожидалось), но если затем вы выберете другой переключатель, значение (ни рядом с name, ни в DataSource) не обновится ( несмотря на то, что значение переключателя корректно обновляется).
  2. Обработчик update в DataSource никогда не вызывается (даже для первого выбранного переключателя и несмотря на то, что DataSource для этого первого переключенного переключателя обновляется).

Вы можете проверить это в JSFiddle: http://jsfiddle.net/OnaBai/K7wEC/

Как сделать так, чтобы DataSource обновлялся и вызывался обработчик update?


person OnaBai    schedule 06.06.2014    source источник


Ответы (1)


Хорошо, решение было довольно простым: установить autoSync в true в определении DataSource.

var my_model = kendo.observable({
    ds: new kendo.data.DataSource({
        transport: {
            read: readData,
            update: updateData,
            create: updateData,
            remove: updateData
        },
        autoSync: true,
        pageSize: 10,
        schema: {
            model: {
                id: "id",
                fields: {
                    id: { type: "number" },
                    name: { type: "string" },
                    active: { type: "boolean" }
                }
            }
        }
    })
});

См. измененный JSFiddle здесь: http://jsfiddle.net/OnaBai/K7wEC/1/

person OnaBai    schedule 06.06.2014