1

最近我遇到了剑道模板的奇怪行为。如果您在模板中有输入,则模板将只记住第一个输入的值。因此,您输入的值以后不可能被覆盖。

我有以下模板

    <script id="add-new-gruppe" type="text/x-kendo-template">
        <div class="row-fluid">
            <div class="span12">
                <label>Name:</label>
                <input type="text" class="span12" id="groupName" name="newGroupName" /><br />
            </div>
        </div>
        <br />
        <div class="pull-right">
            <button class="add-new-gruppe btn btn-primary">OK</button>
            <button class="add-new-gruppe-cancel btn">Cancel</button>
        </div>
    </script>​

问题是,如果用户尝试添加超过 1 个组 - 他将永远无法做到这一点,因为只会考虑第一个输入的名称。

在这里您可以重现该问题(我基于删除确认示例):

http://jsfiddle.net/x79yp/2/

  • 点击“删除记录”
  • 输入 123
  • 点击是
  • 您会看到带有刚刚输入的值的警报。
  • 点击“删除记录”
  • 输入 345
  • 点击是
  • 您会看到带有“123”而不是输入值“345”的警报

要么这是一个非常有趣的错误,要么是一些特定的行为。

任何想法为什么会发生这种情况以及如何解决?

4

1 回答 1

2

问题是您多次创建窗口而不是删除它。当您下次请求input元素时,您将获得第一个元素的值(而不是刚刚创建的最后一个元素)。

相反,请考虑其他代码:

HTML

<button class="delete-button k-button">Delete record</button>
<script id="delete-confirmation" type="text/x-kendo-template">
    <p class="delete-message"> Enter anything </p>
    <input class="span12" id='enteredText'/><br/>
    <button class="delete-confirm k-button"> Yes</button>
    <a href="#" class="delete-cancel k-button">No</a>
</script>

JavaScript:

$(document).ready(function () {
    var template = $("#delete-confirmation").html();
    // Create window once
    var kendoWindow = $("<div />").kendoWindow({
        title    : "Confirm",
        resizable: false,
        modal    : true,
        visable  : false
    }).html(template).data("kendoWindow");

    $(".delete-confirm", kendoWindow.element).click(function (e) {
        alert($('#enteredText').val());
        kendoWindow.close();
    });

    $(".delete-button").click(function (e) {
        $('#enteredText').val("");  // Clean previous value
        kendoWindow.open();
    });

    $(".delete-cancel").click(function () {
        kendoWindow.close();  // Cancel without showing
    });
});

看到它在这里运行

于 2013-01-14T17:33:11.603 回答