1

我使用敲除扩展在数据表中加载超过 1000 行。im 使用 map.fromjs 将这些项目映射到可观察数组中,它确实减慢了页面的初始加载速度。

为了避免这种缓慢的初始加载,我尝试将可观察数组设置为仅填充普通 json 对象,这意味着数组中包含的 1000 多个对象是不可观察的。

但是由于对象是不可观察的,因此当对普通对象进行编辑时,由于没有绑定,因此在数据表网格中看不到更改。有没有办法让 ui 改变以适应普通编辑的 json 对象的新值?

我什至尝试从可观察数组中删除已编辑的对象并读取它但没有成功。

4

2 回答 2

0

您应该将每个项目的每个可编辑属性设置为可观察的。例如:

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/

于 2013-04-20T18:44:20.743 回答
0

2500 个对象并不多... 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)
    )
于 2015-09-22T18:32:20.713 回答