如果你想发现并响应一个对象的改变,就应该用监控属性(observables)。如果你想发现并响应一个集合的变化,就该用监控属性数组 (observableArray)。监控属性数组在显示或编辑多个值以及对界面的一部分重复显示或隐藏(如添加删除条目)等多种情况下 都是很有用的。
如果我们想要使用Knockoutjs表示多个值的话我们可以使用数组监控(Observable Arrays)来表示,形式如下:
var myObservableArray = ko.observableArray(); myObservableArray.push('Some value');myObservableArray.push('Some value');
在第一行我们实例化了一个数组,在第二行我们向此数组中添加了一条记录,正如我们看到的那样,往数组中添加数组我们使用push方法。当然我们也可以在初始化数组的时候为其赋初值,代码如下:
var anotherObservableArray = ko.observableArray([ {name: "Bungle", type: "Bear" }, {name: "George", type: "Hippo" }, {name: "Zippy", type: "Unknown" } ]);
以上的代码我们在定义一个数组的同时为其赋了初值,这样我们就可以通过以下的方法进行数组的访问了:
alert('The length of the array is ' + myObservableArray().length); alert('The first element is ' + myObservableArray()[0]);
在第一行的代码中我们使用了数组的length属性来求得数组的长度,在第二行的代码中我们取得了数组的第一个值。
Knockoutjs数组常用的方法如下:
(1)、myObservableArray.push('Some new value'):增加一个新的元素
(2)、myObservableArray.pop():删除一个元素,并返回其值
(3)、myObservableArray.unshift('Some new value'):在数组的开始处增加一个新的元素
(4)、myObservableArray.shift():删除数组的第一个元素,并返回其值
(5)、myObservableArray.reverse():反转数组的顺序
(6)、myObservableArray.sort():数组排序。排序规则可以由用户自己定义也可以使用默认,默认情况下按照字母顺序或者数字的顺序进行排序。自己定义排序规则时需要接收数组 中的两个元素,并且需要返回一个数值,当此值小于0时表示第一个元素较小,当此值大于0时,表示第二个元素较小,当等于0时表示两个元素相等。示例如下:
myObservableArray.sort(function(left, right) { return left.lastName == right.lastName ? 0 : (left.lastName < right.lastName ? -1 : 1) })
(7)、myObservableArray.splice():数组截取。例如:myObservableArray.splice(1, 3),代表从数组的第一个元素开始,截取三个元素,并且将他们作为数组返回。
remove and removeAll
observableArray 增加了一些更有用的方法,而且是Js数组没有的
myObservableArray.remove(someItem)移除myObservableArray数组内所有匹配someItem的对象, 并把这些对象组成一个数组返回
myObservableArray.remove(function(item) { return item.age < 18 })移除myObservableArray数组内所有年龄属性小于18的对象,并返回这些对象组成的新数组
myObservableArray.removeAll(['Chad', 132, undefined])移除myObservableArray数组内所有匹配'Chad',123, orundefined 的对象并把它们组成新数组返回
myObservableArray.removeAll()移除myObservableArray数组内所有数据,并返回这些数据组成的一个新数组