【发布时间】:2017-04-07 08:50:59
【问题描述】:
我正在使用 Ember 2.12。
我在控制器中有一个数组selectedDays: [Object] 传递给组件。组件有一个类似monthDays: [Object] 的数组。如果组件中的对象可以在控制器的数组中找到,则需要设置selected 属性。
问题是基于 Moment 库方法 (moment1.isSame(moment2, 'day')) 比较对象的成本非常高。所以现在当我向selectedDays 数组添加一些东西时,monthDays 中的每个对象都需要与selectedDays 中的每个对象进行比较。这可能是成百上千次代价高昂的比较。
monthDays 总是有 42 个长度(6 周),但 selectedDays 可以是几十个或几百个。
我想知道是否可以在没有一些蛮力自定义排序/查找优化的情况下对其进行优化。
最简单的解决方案是:在控制器阵列更改时,检查确切更改的内容并仅修改与更改匹配的一天。但据我所知:
- 您无法将操作从控制器发送到组件
- 数组观察者不“知道”数组中究竟发生了什么变化 (?)
我还有什么其他选择?
我设置了一个 Ember Twiddle,在它被选中前一天,每次点击都会出现 200-300 毫秒的延迟。
【问题讨论】:
-
能否只存储 selectedDays 数组中的数据索引?或者你可以用
{day, isSelected}结束你的日子吗? -
我可以打包我的日子,实际上它们是打包器,但这并不能改变我不想修改控制器 (DDAU) 中的对象的事实。
selectedDays是原始的moment()对象,它们不存储在应用商店中。