Kendo UI javascript:远程绑定表单

时间:2018-02-27 02:28:11

标签: javascript kendo-ui

我无法开始将表单绑定到Kendo UI中的远程数据源以获取javascript

我已经验证了ajax调用返回了正确的JSONP有效负载,例如:

jQuery31006691693527470279_1519697653511([{"employee_id":1,"username":"Chai"}])

以下是代码:

    <script type="text/javascript">
    $(document).ready(function() {

        var viewModel = kendo.observable({
            employeeSource: new kendo.data.DataSource({
                transport: {
                    read: {
                        url: baseUrl + "/temp1",
                        dataType: "jsonp"
                    },
                    parameterMap: function(options, operation) {
                        if (operation !== "read" && options.models) {
                            return {
                                models: kendo.stringify(options.models)
                            };
                        }
                        return options;
                    }
                },
                batch: true,
                schema: {
                    model: {
                        id: "employee_id",
                        fields:{
                            employee_id: { type: "number" },
                            username: { type: "string" }
                        }
                    }
                }
            }),
            hasChanges: false,
            save: function() {
                this.employeeSource.sync();
                this.set("hasChanges", false);
            },
            change: function() {
                this.set("hasChanges", true);
            }
        });

        kendo.bind($("#item-container"), viewModel);

        viewModel.employeeSource.read();


    });
    </script>

<div id="item-container">

        <div class="row">
            <div class="col-xs-6 form-group">
                <label>Username</label>
                <input class="form-control k-textbox" type="text" id="username" data-bind="value: username, events: { change: change }" />
            </div>

        </div>

    <button data-bind="click: save, enabled: hasChanges" class="k-button k-primary">Submit All Changes</button>

</div>

没有引发任何错误,但我希望我的username文本表单字段填充值&#39; Chai&#39;等等..但它不会

1 个答案:

答案 0 :(得分:0)

您的文本框绑定到username属性,但这在您的视图模型中不存在,也不会在任何位置填充。假设您的数据源在调用read()后正确占用了员工,则需要将其解压缩并使用以下内容将其设置到您的viewmodel中:

change: function(e) {
    var data = this.data();
    if (data.length && data.length === 1) {
        this.set("employee", data[0]);
        this.set("hasChanges", true);
    }
}

并修改这样的绑定:

<input class="form-control k-textbox" type="text" id="username"
  data-bind="value: employee.username, events: { change: change }" />

您还应该知道在其他情况下会引发change事件,因此如果您开始使用数据源进行更新,则需要调整该代码以考虑其类型请求。有关详细信息,请参阅event documentation。希望这会有所帮助。