当前位置: 首页 > 知识库问答 >
问题:

KendoUI-使用MVVM和远程数据时的级联下拉列表

海新霁
2023-03-14

我有一个KendoUI下拉列表,它从网络服务中获取数据,这取决于所选的项目,第二个下拉列表被填充。我使用MVVM绑定。

我的代码如下所示:

<div id="ddlDiv">
    <div data-container-for="MEASURE" required class="k-input k-edit-field">
    <select id="MEASURE"
            name="MEASURE"
            data-role="dropdownlist" 
            data-text-field="FIELD_NAME" 
            data-value-field="FIELD_ID" 
            data-bind="value: summaryDef.MeasureID, source: fieldList"                                 
            ></select>                      
    </div>       

    <div data-container-for="OPERATION" required class="k-input k-edit-field">
    <select id="OPERATION"
            data-cascade-from: "MEASURE"
            data-role="dropdownlist" 
            data-text-field="TYPE" 
            data-value-field="OP_ID" 
            data-source=opListDS
            data-bind="value: summaryDef.OperationID"                 
            ></select>                      
    </div>               
 datasetMetaModel = kendo.observable({
    fieldList: datasetModel.FieldDTOList,
    summaryDef: datasetModel.SummaryDef
    });

kendo.bind($("#ddlDiv"), datasetMetaModel);

var opListDS = BuildOperationFields();
function BuildOperationFields() {
    opListDS = new kendo.data.DataSource({
        transport: {
            read: {
                url: '@Url.Action("GetMeasureOperations", "Wizard")',
                dataType: 'json',
                contentType: "application/json; charset=utf-8",
                serverFiltering: true,
                type: "GET"
            }
        }

    });

    return opListDS;        
}

两个列表的数据最初都已正确填充,并且已正确绑定到模型。但是,更改第一个下拉列表的值不会导致第二个下拉列表刷新其数据。从未触发对web服务的调用。

我在这里看到过使用本地数据的类似情况:

用于级联DropDownList的MVVM绑定

共有1个答案

陆烨磊
2023-03-14

我不知道这对你来说是否仍然是一个问题,因为已经有一段时间没有问这个问题了,但我想我会回答,因为我今天也有类似的问题,并设法用变通方法解决了它。

我所做的是将处理程序绑定到父组合框的onChange事件,并在子组合框的数据源上手动调用read()

例如。

超文本标记语言:

<div id="content-wrapper">
    <div class="editor-row">
         <div class="editor-label"><label>Country:</label></div>
         <div class="editor-field">
            <select id="Country" name="Country" data-role="combobox"
                    data-text-field="CountryName"
                    data-value-field="CountryId"
                    data-filter="contains"
                    data-suggest="false"
                    required
                    data-required-msg="country required"
                    data-placeholder="Select country..."
                    data-bind="source: dataSourceCountries, value: country, events: { change: refreshCounties }">
            </select>
            <span class="field-validation-valid" data-valmsg-for="Country" data-valmsg-replace="true"></span>
         </div>
   </div>
   <div class="editor-row">
        <div class="editor-label"><label>County:</label></div>
        <div class="editor-field">
           <select id="County" name="County" data-role="combobox"
                   data-text-field="CountyName"
                   data-value-field="CountyId"
                   data-filter="contains"
                   data-auto-bind="false"
                   data-suggest="false"
                   data-placeholder="Select county..."
                   data-bind="source: dataSourceCounties, value: county">
           </select>
           <span class="field-validation-valid" data-valmsg-for="County" data-valmsg-replace="true"></span>
         </div>
</div>

然后我的视图模型:

$ns.viewModel = kendo.observable({
                dataSourceCountries: new kendo.data.DataSource({
                    transport: {
                        read: {
                            url: href('~/Api/GeographicApi/ListCountries'),
                            dataType: 'json'
                        }
                    },
                    schema: {
                        data: function (response) { return response.Data || {}; }
                    }
                }),
                dataSourceCounties: new kendo.data.DataSource({
                    transport: {
                        read: {
                            url: function () { var combobox = $('#Country').data('kendoComboBox'), id = combobox !== undefined ? combobox.value() : 0; return href('~/Api/GeographicApi/ListCountiesByCountryId/' + id) },
                            dataType: 'json'
                        }
                    },
                    schema: {
                        data: function (response) { return response.Data || {}; }
                    }
                }),
                refreshCounties: function (e) {
                    var countiesList = $('#County').data('kendoComboBox');
                    e.preventDefault();
                    countiesList.dataSource.read();
                }
});
kendo.bind($('#content-wrapper'), $ns.viewModel);

如果您还没有找到解决方案,希望这对您有所帮助。。。

 类似资料:
  • 我想根据ViewBag值过滤下面加载的ProductData dropdownlist,比如ViewBag。类别需要传递给GetProductData()的viewbag值。我怎样才能做到这一点。非常感谢。 控制器: //需要基于viewbag进行过滤。类别值

  • 如何将本地数组绑定到剑道的MVVM dropdown列表。 我有一个这样的阵列 我想把它绑定到我的输入控件 它不工作。有什么想法我可以实现这一点吗? 谢谢

  • 问题内容: 我必须制作一个带有多个互相修改的下拉菜单的表单。菜单/数据库表是: 类别,样式,类型和机制 我尝试使用有限的Ajax知识来执行此操作,但是似乎只能访问一次MySQL(在初始页上)以填充Categories表,而后无法通过查询下一组结果来更新Styles表。我收到一个错误,声称数据库为空。 我还尝试通过选项组填充下拉列表,以使用循环查询来处理“类别”和“样式”,但是仅显示“类别”标题,而

  • 问题内容: 我有以下问题: 我开始用HTML和JS创建表单,并且有两个下拉菜单(国家和城市)。现在,我想使用JQuery使这两个动态,以便仅显示所选国家/地区的城市。 我从一些基本的JS入手,但效果不错,但在IE中却有些麻烦。现在,我正在尝试将JS转换为JQuery,以获得更好的兼容性。 我原来的JS看起来像这样: 我知道这很简单,但是我看不到树木的木头。 问题答案: 它应该像

  • 问题内容: 我有一组对象,它们只是项目。我还有一个下拉菜单,我希望使用该下拉菜单允许用户按价格或评分进行过滤,但是在页面加载时不应进行过滤。 如何根据当前选择选项映射项目数据以进行过滤? 我有一个笨拙的入门:LINK 问题答案: 首先,您选择的值不明确。它们包含可以对条目进行过滤和排序的值-将它们分开是两个功能,因此将它们分开。 接下来,您需要定义一个自定义过滤器,该过滤器将根据所选的评级过滤数据

  • 如何将MVVM值绑定到dropdownlist?下面的输入元素运行良好