【问题标题】:preload the selected values of a kendo multiselect that using a server bound data source and templated tags预加载使用服务器绑定数据源和模板标签的剑道多选的选定值
【发布时间】:2013-05-09 17:17:03
【问题描述】:

我有一个剑道多选,如下所示。

$("#tags").kendoMultiSelect({
    change: onChange,
    dataSource: {
        transport: {
            prefix: "",
            read: {
                url: "/OpsManager/Api/Activity/SearchResourcesTagged",
                data: getSubmitData
            }
        },
        serverFiltering: true,
        filter: [],
        schema: { errors: "Errors" }
    },
    itemTemplate: $('#resourceItemTemplate').html(),
    tagTemplate: $('#resourceTagTemplate').html(),
    dataValueField: "k",
    value: [{"k":"[109]","n":"All Open Alerts","icon":"!","all":105}]
});

使用以下模板:

<script id="resourceItemTemplate" type="text/x-kendo-template">
    <span data-icon="#:data.icon#" class="#: data.s || '' #">&nbsp;#:data.n #</span>  
    # if (data.d) { #
        <div class="details">#: data.d #</div>
    # } #
    # if (data.details) { #
    <div class="details k-state-disabled">
        # for (var v in data.details) { 
            var t = typeof data.details[v];
            if (t != "object" && t != "function" && v != "uid") { #
        <div class="k-button">#: v #: #: data.details[v] #</div>
        # } } #
    </div>
    # } #      
</script>

<script id="resourceTagTemplate" type="text/x-kendo-template">
    <span data-icon="#:data.icon#" class="tag-content #: data.s || '' #">&nbsp;#:data.n #</span> 
</script>
<select id="tags" multiple="multiple" name="tags"></select>

我正在尝试预加载特定的选择,但我似乎无法让它工作。

选择:

[{"k":"[109]","n":"All Open Alerts","icon":"!","all":105}]

我已经根据他们的文档将初始化值放在适当的位置,并在浏览器中查看多选对象我在 _initialValues 中看到传入的对象,但在 _dataItems 或 ui 上的标记列表中看不到任何内容.

任何线索如何使它工作?

【问题讨论】:

    标签: initialization kendo-ui multi-select


    【解决方案1】:

    感谢@OnaBai,

    问题在于数据源的预期内容不同。最初加载的数据源不是在寻找“[109]”,而是在寻找“一些字符串查询”,然后围绕该搜索提供一个特定列表。因此我需要为控件初始化一个假数据源,然后立即为动态数据源切换数据源。

    $("#tags").kendoMultiSelect({
        change: onChange,
        dataSource: {
            transport : {
                read: function (op) {
                    op.success([{"k":"[109]","n":"All Open Alerts","icon":"!","all":105}]);
                }
            }
        },
        itemTemplate: $('#resourceItemTemplate').html(),
        tagTemplate: $('#resourceTagTemplate').html(),
        dataValueField: "k",
        value: ["[109]"]
    });
    $("#tags").data("kendoMultiSelect").setDataSource({
        transport: {
            read: {
                url: "OpsManager/Api/Activity/SearchResourcesTagged",
                data: getSubmitData
                }
            },
        serverFiltering: true,
        filter: [],
        schema: { errors: "Errors" }
    });
    

    之后它的工作方式与预期完全一样。

    【讨论】:

    • 有些东西我不明白。 getSubmitedData 是什么?您的服务SearchResourcesTagged 返回的 JSON 格式是什么?为什么需要更改DataSource
    • getSubmittedData 将数据源调用格式化为具有查询值。该服务返回一个像 [{"k":"[109]","n":"All Open Alerts","icon":"!","all":105}] 这样的 json 格式
    • 仍然不明白为什么不能直接使用 DataSource,需要分两步完成,但我很高兴你能够让它运行。
    【解决方案2】:

    两个问题:

    1. multiselect 中定义value 而不是在dataSource 中。
    2. value 设置为array,其中包含您要最初加载的键值列表(在您的情况下为"[109]")。

    类似:

    $("#tags").kendoMultiSelect({
        change: onChange,
        dataSource: {
            transport: {
                prefix: "",
                read: {
                    url: "/OpsManager/Api/Activity/SearchResourcesTagged",
                    data: getSubmitData
                }
            },
            serverFiltering: true,
            filter: [],
            schema: { errors: "Errors" }
        },
        itemTemplate: $('#resourceItemTemplate').html(),
        tagTemplate: $('#resourceTagTemplate').html(),
        dataValueField: "k",
        value: ["[109]"]
    });
    

    here 中的示例

    【讨论】:

    • 对不起,我的操作在值的位置上不正确,它在正确的位置。现在更新我的操作。
    • 这是否意味着我提出的解决方案不起作用?请查看示例链接 (jsfiddle.net/OnaBai/yBCtc)
    • 我已经更新了我的操作,尝试了你的方向,但它不起作用。不管我在“值”中输入了什么,它都会用我传入的内容填充 _initicalValues 对象,但永远不会将其转换为标签。
    • 实际上,我想我明白了。我必须像您在小提琴中那样预加载我的数据源,然后在初始加载后,将数据源更新为动态数据源。认为这会奏效吗?
    • 不,我认为您不需要它。检查 jsfiddle.net/OnaBai/yBCtc/1 你会看到,即使有延迟的答案,它也会正确设置值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2013-07-14
    相关资源
    最近更新 更多