Как установить значение в Kendo Observable, если оно основано на удаленном источнике данных? - PullRequest
0 голосов
/ 11 июля 2019

Мне нужно значение по умолчанию для поля, которое я получаю из источника данных, и привязка к этому полю с использованием наблюдаемой. (Это значение затем может быть обновлено, если это необходимо пользователю, используя древовидное представление). Я могу прочитать исходный удаленный источник данных, построить наблюдаемую и привязать значение к полю. Затем я могу открыть диалоговое окно, показать дерево и вернуть значения. То, что я не могу сделать, это установить значение наблюдаемого, потому что оно основано на источнике данных и, следовательно, кажется гораздо большим и более сложным объектом json, который я просматриваю в консоли. Я также должен был связать по-другому, чтобы заставить это работать так, как показано ниже.

Ниже, если просто фрагмент, но должен дать представление. Удаленный источник данных возвращает просто: {"name": "строка имени"}

<p>Your default location is currently set to: <span id="repName" data-bind="text: dataSource.data()[0].name"></span></p>

<script>
    $(document).ready(function () {

    var personSource2 = new kendo.data.DataSource({
        schema: {
                model: {
                    fields: {name: { type: "string" }}
                }
            },
        transport: {
            read: {
                url: "https://my-domain/path/paultest.reportSettings",
                dataType: "json"
            }            
        } 
    });

    personSource2.fetch(function(){
    var data = personSource2.data();
    console.log(data.length);  // displays "1"
    console.log(data[0].name); // displays "a name string"

        var personViewModel2 = kendo.observable({
        dataSource: personSource2
        });

    var json = personViewModel2.toJSON();
    console.log(JSON.stringify(json)); 

    observName1 = personViewModel2.get("dataSource.data.name");
    console.log("read observable: "+observName1);

    kendo.bind($(''#repName''), personViewModel2);

    });

После долгих тренировок мне удалось получить значение для привязки, используя: data-bind = "text: dataSource.data () [0] .name" но я не могу найти это нигде. Когда я выводил наблюдаемое на консоль, я получаю большой большой объект, а не простую наблюдаемую структуру данных, которую я ожидал. Я подозреваю, что мне здесь не хватает чего-то фундаментального! В настоящее время я просто пытаюсь прочитать наблюдаемое выше, но не могу заставить его вернуть строку из источника json.

1 Ответ

0 голосов
/ 18 июля 2019
 personSource2.fetch(function(){
 var data = personSource2.data();
 console.log(data.length);  // displays "1"
 console.log(data[0].name); // displays "Jane Doe"

    var personViewModel2 = kendo.observable({
    dataSource: personSource2
    });

    var json = personViewModel2.toJSON();
    console.log(JSON.stringify(json)); 

    observName1 = personViewModel2.get("dataSource.data()[0].name");
    console.log("read observable: "+observName1);

    personViewModel2.set("dataSource.data()[0].name","Another Value");
    observName1 = personViewModel2.get("dataSource.data()[0].name");
    console.log("read observable: "+observName1);

    kendo.bind($(''#repName''), personViewModel2);

 });
...