包含用户控件的分层网格问题具有唯一ID

时间:2016-09-02 10:56:00

标签: javascript jquery kendo-ui kendo-grid

我有一个嵌套的剑道Grid,其中包含一个TabStrip控件,该控件又包含从初始kendoComboBox元素生成的多个div

网格是在Javascript中生成的:

$("#configAddGrid").kendoGrid({
        dataSource: gridConfigDataSourceAdd,
        height: 550,
        detailTemplate: kendo.template($("#templateAdd").html()),
        detailInit: detailAddInit,
        navigatable: true,
        autoBind: false,
        editable: {
            mode: "incell"
        },
        toolbar: ["create"],
        columns: columnSchemaAdd
    });

kendo-template定义如下。使用每行TabStrip字段唯一标识ID

@(Html.Kendo().TabStrip()
        .Name("tabStripAdd_#=ID#")
        .SelectedIndex(0)
        .Animation(animation => animation.Open(open => open.Fade(FadeDirection.In)))
        .Items(items =>
        {
                items.Add().Text((string)ViewBag.ControlSetLots[0].LotNumber).Content(@<text>

                    <p>StandardComment: </p>
                    <div id='Lot1StandardCommentDropDownAdd_#=ID#' class='Lot1StandardCommentDropDownAdd'>    
                    </div> 
                    <p>Review Comment: </p>
                    <div id='Lot1ReviewCommentDropDownAdd_#=ID#' class='Lot1ReviewCommentDropDownAdd'>        
                    </div>

                   </text>
                );
            }...

我的计划是通过ComboBox函数初始化每个Kendo detailAddInit,即一旦发送请求以扩展一行。 ComboBox的创建将基于div的唯一ID。 但是,使用检查器窗口(emptyID.png)检查时,分配给#=ID#的{​​{1}}为空,即使它已附加到div控件。

TabStrip

我是否可以将相同的ID附加到function detailAddInit(e) { var closestCB = e.detailRow.find('.Lot1StandardCommentDropDownAdd'); createStandardCommentDropDown("#Lot1StandardCommentDropDownAdd"); createReviewCommentDropDown("#Lot1ReviewCommentDropDownAdd"); kendo.bind(e.detailRow, e.data); } 的末尾以使其唯一?Difference between TabStrip and Div IDs

此外,如果有人能想出更好的方法来达到相同的结果,请随时发表评论,因为我愿意接受建议。

1 个答案:

答案 0 :(得分:2)

我找到了一个解决方案,以确保为每个ComboBox分配一个唯一的ID。

1)删除了ID中分配的cshtml

@(Html.Kendo().TabStrip()
        .Name("tabStripEdit_#=ID#")
        .SelectedIndex(0)
        .Animation(animation => animation.Open(open => open.Fade(FadeDirection.In)))
        .Items(items =>
        {                
            items.Add().Text((string)ViewBag.ControlSetLots[0].LotNumber).Content(@<text>

                <p>Standard Comment: </p>
                <div class='Lot1StandardCommentDropDownEdit'>
                </div>
                <p>Review Comment: </p>
                <div class='Lot1ReviewCommentDropDownEdit'>
                </div>

                </text>
            );
        }

2)修改了detailAddInit(e)函数,使用div中请求嵌套detailTemplate的当前时间来分配唯一的Grid ID:

function detailAddInit(e) {
    var time = new Date().getTime().toString();
    // find combo box associated with current row
    var closestSCCB = e.detailRow.find('.Lot1StandardCommentDropDownAdd');            
    // assign a unique ID to the div
    var SCID = 'Lot1StandardCommentDropDownAdd_' + time;
    closestSCCB.attr('id', SCID);
    var closestSCCB2 = e.detailRow.find('.Lot1StandardCommentDropDownAdd');            

    var closestRCCB = e.detailRow.find('.Lot1ReviewCommentDropDownAdd');
    var RCID = 'Lot1ReviewCommentDropDownAdd_' + time;
    closestRCCB.attr('id', RCID);
    var closestRCCB2 = e.detailRow.find('.Lot1ReviewCommentDropDownAdd');

    createStandardCommentDropDown(closestSCCB2[0]);
    createReviewCommentDropDown(closestRCCB2[0]);   
}

虽然这是我的利基场景,但我希望这可以在将来的某些日子做到!