如何在knockout js中对dependentObservable PagedList数据进行排序

时间:2013-02-11 19:30:06

标签: knockout.js

我创建了一个带有分页选项的页面。 代码看起来像:http://blog.ryanvanderpol.com/index.php/2012/07/using-knockoutjs-to-create-an-edit-in-place-data-grid/

现在无法在knockout js中向dependentObservable PagedList数据添加排序

因为PagedList没有Sort()prpoerty ..

请帮助我

2 个答案:

答案 0 :(得分:1)

你可以改变他的viewmodel来使用一个计算而不是一个可观察的数组吗?

这是一个例子

self.list = ko.observableArray(initialData);

self.sortProperty = ko.observable('propertyNameInRowObject');

self.sortedList = ko.computed( function() {
    var sorted = self.list.sort( self.sortFn );    
    return sorted;
};

self.sortFn = function(a, b) {
    if ( a[self.sortProperty()] > b[self.sortProperty()] ) {
        return 1
    }
    else if ( a[self.sortProperty()] < b[self.sortProperty()] ) {
        return -1
    }
    else { 
        return 0
    }
}

self.onColumnClicked = function(e) {
    var colName = e.target.Name; // probably something like this...
    if ( colName === 'xyz' ) {
        self.sortProperty('xyzProperty');
    }
}

对不起,我的javascript有点生疏了,我一直在用coffeescript做我的大部分内容

答案 1 :(得分:0)

你可以替换这样的东西:

self.someArray = ko.dependentObservable(function() {
    return [someDependency()];
});

用这个:

self.someArray = ko.observableArray();
ko.dependentObservable(function() {
    self.someArray([someDependency()]);
});

// now you can call sort on someArray
var sortedArray = self.someArray.sort();

您可以使用dependentObserable / computed来计算其他observable的新值而不返回任何值。