如果我有一个带比较器的集合. (在coffeescript中)
class Words extends Backbone.collection comparator: (word)-> word.get('score')
如果我要改变,我如何保持收集分类
基础项目的得分.这个想法是为了
将此附加到列表视图中的项目与
最低分始终在最高分.
我一直在手动调用集合上的排序
每次我改变一个实例,但这似乎没有
考虑到整个列表已排序,效率太高
有一个项目.
有什么建议?
解决方法
由于一个简单的原因,渲染代码看起来非常低效:DOM操作很昂贵.只要有可能,您应该操作DOM一次而不是几次. JavaScript / CoffeeScript中的所有其他优化都是次要的.
这是显着的代码(来自关于Ambertch响应的第二条评论的主要内容):
refresh: -> @list.listview("refresh") appendWord: (word)-> wv = new WordView({model: word}).render().el @list.append( wv ) @refresh() render: -> @list.html("") @model.each (word) => @appendWord(word) @refresh()
因此,在渲染时,首先清除列表的HTML;然后为每个单词清除列表的HTML并刷新控件!
我不熟悉jQuery Mobile,所以我不确定主要的惩罚是在追加(因为它是在jQuery中)还是在listview(‘refresh’)上,但是很容易重写循环以避免两者,并删除一些函数定义/调用开销:
render: -> html = [] @model.each (word) -> html.push(new WordView(model: word).render().el) @list.empty().append(html)
原文地址:https://www.jb51.cc/js/157634.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。