我正在学习如何使用Knockout.js.我想反转observableArray内容,所以我用这种方式使用Knockout反向函数:
<ul data-bind="foreach: anObservableArray.reverse()" >...</ul>
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用,也不会发生错误.当我尝试这个:
<ul data-bind="foreach: anObservableArray.slice(0).reverse()" >...</ul>
Run Code Online (Sandbox Code Playgroud)
它按预期工作.我的问题是,当反向函数已经返回反向数组时,为什么我必须复制整个数组?
调用reverse实际上将就地反转数组(并返回它),因此您可能会遇到多次反转的问题.
例如,如果您有两个块,例如:
<ul data-bind="foreach: anObservableArray.reverse()" >...</ul>
<ul data-bind="foreach: anObservableArray.reverse()" >...</ul>
Run Code Online (Sandbox Code Playgroud)
第一个将被反转,第二个将回到原始顺序.
最好反转副本,特别是如果要添加和删除数组中的项目.
我从这个问题的搜索中得到了这个;为什么现在需要复制数组,
“knockout.js 2.2 中进行了更改,使数组突变函数不会创建对可观察数组的依赖。通常,如果您希望计算返回数组的反向版本,您不会在原始数组上使用反向,而是在复制。代替
self.anObservableArray.reverse(),执行
self.anObservableArray.slice(0).reverse()
示例:http://jsfiddle.net/mbest/3QHM7/1/
所以基本上,这是为了避免创建对可观察数组的依赖。
| 归档时间: |
|
| 查看次数: |
4910 次 |
| 最近记录: |