我们有一个通过模板映射的大型嵌套可观察数组来创建树视图。该列表是动态的,但树中可能有 1000 多个元素。
我们在加载和搜索此集合时遇到性能问题 - 在 IE8 和 iPad 中最为明显。铬似乎还可以。
集合中的元素实际上并没有改变,所以我认为我们不需要 observable 的“通知”方面,但我们想利用数据绑定。
有没有办法对视图模型中不可观察的对象进行数据绑定?有没有办法在不使用 ko.mapping.fromJS() 的情况下创建不可观察的复杂数据集合?
我们有一个通过模板映射的大型嵌套可观察数组来创建树视图。该列表是动态的,但树中可能有 1000 多个元素。
我们在加载和搜索此集合时遇到性能问题 - 在 IE8 和 iPad 中最为明显。铬似乎还可以。
集合中的元素实际上并没有改变,所以我认为我们不需要 observable 的“通知”方面,但我们想利用数据绑定。
有没有办法对视图模型中不可观察的对象进行数据绑定?有没有办法在不使用 ko.mapping.fromJS() 的情况下创建不可观察的复杂数据集合?
您可以完全绑定不会更改且不可观察的属性。似乎您只想以与映射插件相同的方式将一个大对象映射到另一个对象,但不创建可观察对象。您是否考虑过简单地使用JQuery.extend?
如果您的数组是可观察的,那么请确保您遵循这篇出色文章中的指南。
我还听说有人通过从原生模板切换到第三方(如 jquery.tmpl)来获得更好的性能(不确定这是否适用于您)。
编辑
在评论中进一步澄清后。问题是您的绑定假设属性是可观察的。在您的模板中,您有以下行。
<!-- ko if: IsSectionHeader() -->
这是执行 observableIsSectionHeader
以获得它的价值。当 IsSectionHeader 是 observable 时这很好,因为 observable是函数。当您切换到原始模型时,这将不起作用。我建议使用诸如firebug之类的工具并检查错误控制台,它准确地报告了错误。
无论如何,解决方法是删除双括号。请注意,即使属性是可观察的,ko 绑定也可以使用带或不带括号的可观察对象,因此无论如何都不需要它们。
希望这可以帮助。