如何阻止 Kendo KO Grid 自动滚动

How to stop Kendo KO Grid from auto-scrolling

我在 kendo window 中有一个 kendo 剔除网格,网格非常基本,有一个复选框列和其他 3 个文本列。复选框列与网格的记录模型中的可观察对象 属性 绑定,如

$model.isChecked = ko.observable(false);

网格的数据源是一个给定的可观察数组 javascript model.The 网格有分页,页面大小为 10 条记录,并且是可滚动的。

我遇到的问题是,由于某些奇怪的原因,当我单击网格底部的复选框时,网格向上滚动到顶部,隐藏了我刚刚选中的记录。

我有其他网格背后有相同的逻辑,但这种行为没有发生,我尝试了不同的东西,似乎每次我更改记录模型的可观察 属性 时,网格都会执行相同的。我也尝试订阅网格的滚动事件,但我无法找到与我触发滚动或网格自己执行的区别。

我也尝试了这里的建议:other question但是我得到的行为并不好,因为你看到像闪烁一样,网格滚动到顶部然后滚动到选定的行。

那么,你们有遇到过类似的问题吗?

谢谢,

试试这个对我有用

在grid的dataBound和dataBinding事件中

dataBound = function (e) {
    var sender = e.sender;
    sender.content.scrollTop(sender.options.gridTop);
}

dataBinding = function (e) {
    var sender = e.sender;
    sender.options.gridTop = sender.content.scrollTop();
};

实际上,经过更多的调试我能够修复它,它是两件事的组合,首先我必须从数据源中删除类型声明:

dataSource: {
    type: 'knockout',
    pageSize: 10,
    page: 1,
    watchable: {
        filter: dataSourceWithFilters
    },
    schema: {
        model: {
            fields: {
                'effectiveFrom()': { type: 'date' },
                'effectiveTo()': { type: 'date' },
                'isChecked()': { type: 'boolean' } // <- this line was removed
            }
        }
    }
}

然后,我在模型中有一些日期,但我将它们计算 "listening" 到同一模型中的一个可观察变量,每次该可观察变量有一个值时,我返回日期


$model.link = ko.observable();

$model.effectiveFrom = ko.computed(function () {
    if ($model.link()) {
        return $model.link().effectiveFrom();
    }

    return null;
});

$model.effectiveTo = ko.computed(function () {
    if ($model.link()) {
        return $model.link().effectiveTo();
    }

    return null;
});

这似乎让网格在每次任何日期值更改时重新绑定自己,所以我为此更改了代码:


$model.link = ko.observable();

$model.link.subscribe(function (value) {
    if (value) {
        $model.effectiveFrom = ko.observable(value.effectiveFrom()).withDateFormat('MMM-DD-YYYY');
        $model.effectiveTo = ko.observable(value.effectiveTo()).withDateFormat('MMM-DD-YYYY');
    }
});

$model.effectiveFrom = ko.observable().withDateFormat('MMM-DD-YYYY');
$model.effectiveTo = ko.observable().withDateFormat('MMM-DD-YYYY');

随着这些更改,网格停止滚动到顶部。

感谢您的帮助。