如何阻止 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');
随着这些更改,网格停止滚动到顶部。
感谢您的帮助。
我在 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');
随着这些更改,网格停止滚动到顶部。
感谢您的帮助。