我使用knockout extension.im在数据表中加载超过1000行,使用map.fromjs将这些项映射到一个可观察的数组中,它确实减慢了页面的初始加载速度。
为了避免这种缓慢的初始加载,我试图将可观察数组设置为只用普通的json对象填充,这意味着数组中包含的1000多个对象是不可观察的。
但由于对象不可观察,因此在普通对象上进行编辑时,由于没有绑定,因此在数据表网格中没有看到更改。有没有办法让ui更改以适应普通编辑的json对象的新值?
我甚至尝试从可观察数组中删除已编辑的对象,但没有成功读取它。
答案 0 :(得分:0)
您应该将每个项目的每个可编辑属性设置为observable。例如:
self.items = ko.observableArray(ko.utils.arrayMap(
datasource,
function(row){
return {
id: row.id,
title: ko.observable(row.title)
};
}
));
不关心成千上万的物体;这个金额不是很大。
了解它如何与2,500个obj一起使用:http://jsfiddle.net/HfzvG/
答案 1 :(得分:0)
2500 objecs并不是很多... imo ...但是,我有一个项目试图用90,000 +行来实现这一点而且它实际上杀死了chrome ...解决方案是服务器端分页...我创建了每次请求少量行的敲除绑定分页。这些参数在我的存储过程中处理。您也可以使用服务器端语言处理分页参数。这需要更多的服务器访问,但权衡是值得的..
这里有一些SQL代码......
declare @rowCount int = 25;
Select MainSearchWithRowNumbers.*
FROM
(SELECT
ROW_NUMBER() OVER () As RowNumber
,Count(*) OVER () as TotalRows
,CEILING(CAST(Count(*) OVER () as FLOAT) / CAST(@rowCount as FLOAT)) AS TotalPages
,*
FROM
(
SELECT
-- ROW_NUMBER() OVER (ORDER BY CarcassRemovalId) AS AbsRowNumber
Count(*) OVER () AS AbsTotalRows
,CEILING(CAST(Count(*) OVER () AS FLOAT) / CAST(@rowCount AS FLOAT)) AS AbsTotalPages
,*
FROM YOURTABLE)
) as MainSearch
) as MainSearchWithRowNumbers
WHERE
(@page is null)
or (
(RowNumber <= @page * @rowCount)
and (RowNumber > (@page - 1) * @rowCount)
)