1

我有一个 Telerik RadGrid,其中有一个 GridTemplateColumn,它有一个标签来显示从数据库中提取的一些文本。我想在选中复选框时将该标签的最大长度更改为设定的字符数。我使用以下代码在后端执行此操作

protected void grdNoteHistory_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridDataItem)
        {
            GridDataItem item = (GridDataItem)e.Item;
            HiddenField hdnNoteValue = (HiddenField)item.FindControl("hdnNoteValue");
            Label lblNote = (Label)item.FindControl("lblNote");
            History historyItem = (History)item.DataItem;
            hdnNoteValue.Value = historyItem.Note;
            lblNote.Text = historyItem.Note;

            if (chkCollapseExpand.Checked == true)
            {
                if (lblNote.Text.Length >= 100)
                {
                    lblNote.Text = historyItem.Note.Substring(0, 100) + "...";
                }
                else 
                {
                    lblNote.Text = historyItem.Note;
                }
            }
        } 
    }

后端处理用户是否对网格或将使用回发来维护该标签的网格文本长度状态的某些功能进行排序。

在前端,我尝试使用 knockout.js 将复选框的选中属性绑定到标签,以便在选中时网格中的所有标签的长度仅为 100 个字符,但未选中时不强制执行限制。

任何帮助,将不胜感激。

4

1 回答 1

3

将您的复选框设置为可观察的值

<input type="checkbox" data-bind="checked: hasLimit" /></p>

将您的标签设置为已计算的 KO

<label data-bind="text: someTextValue"></label>

然后让 someTextValue 基于视图模型中的其他值

var hasLimit = ko.observable(true);
var someTextValue = ko.computed(function () {
    var txtValue = historyItem.Note;
    if (hasLimit) { return txtValue.Substring(0, 100) + "...";
    return txtValue;
};

以上将以限制开始(并且复选框将被选中),然后如果用户取消选中该框,它将显示整个文本。

于 2013-06-07T19:39:58.487 回答