KendoUI - MVVM和远程数据源

时间:2014-07-09 15:56:20

标签: kendo-ui

我正在使用远程数据源从Observable对象中填充列表,如下面的代码所示。 在用户为列表创建新条目时,我在可观察对象中调用一个函数。 要使用新创建的条目刷新列表,我会第二次读取第一个数据源,如下面的代码所示。 问题是,即使在第二次阅读之后,我也没有在列表中看到新添加的条目 感谢您的时间和帮助。

 var viewModel = kendo.observable({
                postingsText: "",
                postings: new kendo.data.DataSource({
                    transport: {
                        read: {
                            dataType: "json",
                            url: "http://localhost:8080/NavXzy/rest/SecurityService/getPostings?starId=3b583bed-fd29-4280-b1f2-c8485f323563"

                        }
                    }
                }),
                addPosting: function(e) {
                    var postingContent = this.get("postingsText");
                   if (postingContent) {
                        var dataSource = new kendo.data.DataSource({
                              transport: {
                                  read: {

                                        url: "http://localhost:8080/NavXzy/rest/SecurityService/posting",

                                        type: "POST",

                                        dataType: "json",

                                        data: { userStarId: "3b583bed-fd29-4280-b1f2-c8485f323563", postingText : postingContent }
                                    }
                              }
                        });
                        dataSource.read();
                     }
                    //refresh the list
                    this.postings.read();
                }

            });
            kendo.bind($("#postingsDiv"), viewModel);

1 个答案:

答案 0 :(得分:0)

这似乎是插入新记录的一种不寻常的方式。 通常,您的DataSource上会有一个“创建”传输,它指定用于添加项目的URL。

类似的东西:

            postings: new kendo.data.DataSource({
                transport: {
                    read: {
                        dataType: "json",
                        url: "http://localhost:8080/NavXzy/rest/SecurityService/getPostings?starId=3b583bed-fd29-4280-b1f2-c8485f323563"

                    },
                    create: {
                        url: "http://localhost:8080/NavXzy/rest/SecurityService/posting",
                        type: "POST",
                        dataType: "json",
                    }
                }
            }),
            addPosting: function(e) {
                var postingContent = this.get("postingsText");
                if (postingContent) {
                    var itemToAdd = {
                        userStarId: "3b583bed-fd29-4280-b1f2-c8485f323563", 
                        postingText : postingContent
                    };
                    viewModel.postings.add(itemToAdd);
                }
            }

然后,向DataSource添加项目的行为将使其调用transport.create.url中指定的URL并将新项目发布到服务器。它还会引发一个change事件,通知UI更新以显示新记录。

如果对.add()的调用未向服务器发出最佳HTTP请求,则在调用viewModel.postings.sync();后立即向.add()添加呼叫。是否需要它取决于是否在DataSource上启用了autoSync


我的猜测是你的原始代码不起作用,因为.read()是异步的,所以第二次读取可能是在你的第一次完成之前发生的。