【问题标题】:Kendo UI: Update transport doesn't trigger after calling datasource syncKendo UI:调用数据源同步后不会触发更新传输
【发布时间】:2013-08-12 18:36:31
【问题描述】:

我在这几个小时内都在苦苦挣扎,我找不到关于如何使用表单和 Kendo MVVVM 和数据源在服务器上实现简单 ajax UPDATE 的好文档。

剑道 MVVM

$(function() {

    var apiUrl = "http://a31262cd2f034ab8bcda22968021f3b8.cloudapp.net/api",            
        meetingDatasource = new kendo.data.DataSource({
            transport: {
                read: {
                    url: apiUrl + "/meetings/4",
                    dataType: "jsonp"
                },
                update: {
                    type: "PUT",
                    url: apiUrl + "/meetings",
                    contentType: "application/json; charset=utf-8",
                    dataType: 'json',
                },

                parameterMap: function(options, operation) {
                    return kendo.stringify(options);
                }
            },
            batch: true,
            change: function() {
            },
            schema: {
                model: {
                    id: "Id",
                    fields: {
                        Title: { editable: true },
                        StartTime: { type: "date" },
                        EndTime: { type: "date" }
                    }
                }
            }
        });

    meetingDatasource.fetch(function () {

        var viewModel = kendo.observable({
            description: result.Description,
            title: result.Title,
            venue: result.Location,
            startDate: result.StartTime,
            endDate: result.EndTime,
            saveChanges: function (e) {

                //im not sure with this line
                this.set("Title", this.Title);
                meetingDatasource.sync();

                e.preventDefault();

            }
        });

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

});

用户界面

<ul class="forms"  id="ul-meeting">
            <li>
                <label for="title" >Title:</label> 
                <input data-bind="value: title" class="k-textbox" style="width:350px;"/>
            </li>
            <li>
                <label for="description" >Description:</label> 
                <textarea data-bind="value: description"  id="description" rows="6" cols="80" class="k-textbox" style="width:350px;"></textarea>
            </li>
            <li>    
                <label for="location">Venue:</label> 
                <textarea  data-bind="value: venue" id="location" rows="4" cols="80" class="k-textbox" style="width:350px;"></textarea>
            </li>
            <li>
                <p>
                    <label for="start-datetime">Start:</label> 
                    <input  data-bind="value: startDate" id="start-datetime" style="width:200px;" />
                </p>
                <p>
                    <label for="end-datetime">Finish:</label> 
                    <input data-bind="value: endDate"  id="end-datetime" style="width:200px;" />
                </p>
            </li>
        </ul>

问题是,TRANSPORT READ 触发但 TRANSPORT UPDATE 永远不会触发,即使我明确调用 Datasource.sync()。是我在这里想念的东西吗?

【问题讨论】:

  • result 似乎没有在 fetch 回调中的任何地方定义。

标签: ajax asp.net-web-api kendo-ui kendo-mvvm


【解决方案1】:

您的代码不完整(您没有显示result 是什么或如何触发saveChanges,但据我所知,问题是您没有更新数据源的内容(meetingDataSource)。

在您的代码中,您将result 中的字段复制ObservableObject,但您从不更新DataSource 的内容。当你调用this.set 时,在这种情况下this 不是DataSource 所以当你调用sync 时你什么都不做。

尝试做:

meetingDatasource.data()[0].set(`Title`, this.Title);
meetingDatasource.sync();

这应该可以解决问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多