我有一个包含数字的可观察数组。我想按价格按钮排序。这是我的viewmodel:
var ViewModel = function(model) {
self.Numbers = ko.observableArray(model);
self.SortArray = function() {
InstanceViewModel.Numbers.sort(function (left, right) {
return left.id == right.id ? 0 : (left.id < right.id ? -1 : 1) })
}
}
var InstanceViewModel = new ViewModel([{"id":"1"},{"id":"2"},{"id":"3"},{"id":"4"}]);
ko.applyBindings(InstanceViewModel);
这是我的HTML:
<input type="button" value="Sort" data-bind="click: SortArrayNum">
<div data-bind="foreach: Numbers">
<h1 data-bind="text: id"></h1>
</div>
它没有正确排序这怎么可能?它还说:&#34; Uncaught TypeError:无法读取属性&#39; sort&#39;未定义&#34;。我上次让这个工作,它随机排序奇怪。我做错了什么人?
答案 0 :(得分:2)
通过阅读http://knockoutjs.com/documentation/observableArrays.html正确的方法
myObservableArray.sort(function (left, right) { return left.lastName == right.lastName ? 0 : (left.lastName < right.lastName ? -1 : 1) })
因此,不应该
self.SortArray = function () {
return self.Numbers.sort(function (left, right) { return left.id == right.id ? 0 : (left.id < right.id ? -1 : 1) })
}
而不是
self.SortArray = function() {
InstanceViewModel.Numbers.sort(function (left, right) {
return left.id == right.id ? 0 : (left.id < right.id ? -1 : 1) })
}
答案 1 :(得分:1)
<input type="button" value="Sort" data-bind="click: SortArray">
<div data-bind="foreach: Numbers">
<h1 data-bind="text: id"></h1>
</div>
var ViewModel = function(model) {
self.Numbers = ko.observableArray(model);
self.SortArray = function() {
self.Numbers.sort(function (left, right) {
return left.id == right.id ? 0 : (left.id < right.id ? -1 : 1) })
}
}
var InstanceViewModel = new ViewModel([{"id":"2"},{"id":"1"},{"id":"6"},{"id":"4"}]);
ko.applyBindings(InstanceViewModel);
http://jsfiddle.net/93Z8N/239/
您将获得异常,因为您的函数名为SortArray而不是SortArrayNum