0

我需要从数据源获取的字段的默认值,并使用可观察对象绑定到该字段。(如果用户需要,可以使用树视图更新该值)。我可以读取初始远程数据源,构建可观察对象并将值绑定到字段。然后我可以弹出一个对话框,显示一棵树并返回值。我似乎无法设置 observable 的值,因为它基于数据源,因此似乎是我在控制台中查看的更大、更复杂的 json 对象。为了使其正常工作,我还必须进行不同的绑定,如下所示。

下面如果只是一个片段,但应该给出一个想法。远程数据源只返回:{"name":"a name string"}

<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" 但我在任何地方都找不到这个文档。在我将 observable 输出到控制台的地方,我得到了一个很棒的大对象,而不是我期望的简单的 observable 数据结构。我怀疑我在这里遗漏了一些基本的东西!我目前只是试图阅读上面的 observable,但无法让它从 json 源返回字符串。

4

1 回答 1

0
 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);

 });
于 2019-07-18T09:53:00.147 回答