Kendo MVVM Dropdown - 如何根据其他数据设置初始值?

时间:2014-07-22 21:05:41

标签: kendo-ui kendo-dropdown kendo-mvvm

我有以下用于Kendo MVVM DropDownList的html:

                <select id="responseTypeDDL"
                    data-role="dropdownlist"
                    data-text-field="SystemResponseTypeCode"
                    data-value-field="SystemResponseTypeId"
                    data-bind="value: selectedSystemResponseTypeCode, source: responseTypes">
                </select>

这是我的观点模型:

        SC.ViewModels.Reference.ResponseTypeDataSource.read();

        var responseTypeDDL = kendo.observable({
            responseTypes: SC.ViewModels.Reference.ResponseTypeDataSource,
            selectedSystemResponseTypeCode: null,
            setSelectedSystemResponseTypeCode: function (code) {
                this.selectedSystemResponseTypeCode = code;
            },
        });

        kendo.bind($("#responseTypeDDL"), responseTypeDDL);

        // after reading data, I call the method to set the selected value like this:
        self.ResponseTypeDDL.setSelectedSystemResponseTypeCode(results.code);

ResponseTypeDataSource.read()方法返回“XML”,“JSON”列表。这是SystemResponseTypeCode字段。我还从数据库中读取了另一个数据项 并检查其响应类型。让我们说它是“JSON”。如何设置下拉列表以选择“JSON”?

2 个答案:

答案 0 :(得分:1)

首先,这部分似乎是错误的

setSelectedSystemResponseTypeCode: function (code) {
    this.selectedSystemResponseTypeCode = code;
},

您应该确保在修改观察变量时调用set()方法,否则它可能不会更新绑定:

this.set("selectedSystemResponseTypeCode", code);

并针对您的实际问题

您需要设置data-value-primitive="true"才能使用ID(Kendo Docs)(请注意下面的更改value: selectedSystemResponseTypeId

<select id="responseTypeDDL"
    data-role="dropdownlist"
    data-text-field="SystemResponseTypeCode"
    data-value-field="SystemResponseTypeId"
    data-value-primitive="true"
    data-bind="value: selectedSystemResponseTypeId, source: responseTypes">
</select>
SC.ViewModels.Reference.ResponseTypeDataSource.read();

var responseTypeDDL = kendo.observable({
    responseTypes: SC.ViewModels.Reference.ResponseTypeDataSource,
    selectedSystemResponseTypeCode: null,
    selectedSystemResponseTypeId: null,
    setSelectedSystemResponseTypeId: function (id) {
        this.set("selectedSystemResponseTypeId", id);
    },
});

kendo.bind($("#responseTypeDDL"), responseTypeDDL);

// Get your id
var id = ...    
responseTypeDDL.setSelectedSystemResponseTypeId(id);

工作示例:http://dojo.telerik.com/AbIm/8

答案 1 :(得分:0)

我设法手动设置下拉列表中的值而不诉诸 数据值原语=&#34;真&#34; 因为我需要访问所选值并显示其他字段。

以下是解决方案:

var id = 1004;
var dataItem = responseTypeDDL.responseTypes.get(id); //get the id in your datasource
responseTypeDDL.set("selectedsystemResponse", dataItem);