我在kendo窗口中有一个kendo淘汰网格,网格非常基本,有一个复选框列,还有3个其他文本列。复选框列与网格的记录模型中的可观察属性绑定,如
$model.isChecked = ko.observable(false);
网格的数据源是给定javascript模型的可观察数组。网格的页面大小为10条记录,并且可以滚动。
我遇到的问题是,由于一些奇怪的原因,当我点击网格底部的复选框时,网格会向上滚动到顶部,隐藏我刚检查的记录。
我有其他网格背后有相同的逻辑,这种行为并没有发生,我尝试了不同的事情,似乎每当我改变记录模型的可观察属性时,网格都是一样的。我也尝试订阅网格的滚动事件,但是我无法找到与我自动触发滚动或网格的区别。
我也尝试过这样的建议:other question但是我得到的行为并不好,因为你看到的是闪烁,网格滚动到顶部,然后滚动到选定的行。
那么,你们中间有人遇到过类似的问题吗?
谢谢,
答案 0 :(得分:1)
试试这个对我有用
在网格的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();
};
答案 1 :(得分:0)
实际上,经过一些调试后我能够修复它,它是两件事的组合,首先我必须从数据源中删除类型声明:
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
}
}
}
}
然后,我在模型中有一些日期,但我将它们计算为“监听”同一模型中的一个可观察变量,并且每次该可观察变量都有一个值时,我返回日期
$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');
通过这些更改,网格停止滚动到顶部。
感谢您的帮助。