Knockout.js 使用<;选择>;

Knockout.js 使用<;选择>;,knockout.js,Knockout.js,我目前有一个使用Knockout的排序实现,其中每个列都是一个数组,用户可以单击该列对ObservableArray进行排序。我想把它转换成一个,我很接近——在我创建的排序中选择一列确实调用了排序函数,但没有像最初的实现那样将要排序的属性传递给排序函数。我曾尝试调用类似“sort(sortType)”的函数来显式传递我想要排序的属性,但这不起作用/原始实现不需要这样的函数 原始分拣代码: <div data-bind="foreach: headers" class="headers"&g

我目前有一个使用Knockout的排序实现,其中每个列都是一个数组,用户可以单击该列对ObservableArray进行排序。我想把它转换成一个,我很接近——在我创建的排序中选择一列确实调用了排序函数,但没有像最初的实现那样将要排序的属性传递给排序函数。我曾尝试调用类似“sort(sortType)”的函数来显式传递我想要排序的属性,但这不起作用/原始实现不需要这样的函数

原始分拣代码:

<div data-bind="foreach: headers" class="headers">
  <span data-bind="click: $parent.sort, text: title"></span>
</div>
<select data-bind="event: { change: sort}, options: headers, optionsText: 'title', optionsValue: 'sortType'">    </select>

选择排序代码:

<div data-bind="foreach: headers" class="headers">
  <span data-bind="click: $parent.sort, text: title"></span>
</div>
<select data-bind="event: { change: sort}, options: headers, optionsText: 'title', optionsValue: 'sortType'">    </select>


以下是您必须使用
绑定,而不是
更改
事件:

<select data-bind="value: sortMode, 
                   options: headers, 
                   optionsText: 'title'"></select>

针对您的特定代码/案例 在这里查看我的建议:

查看代码,我建议将
self.activeSort
设置为可观察的,引入名为
sortMethod
pureComputed
属性,以及名为
sortedMovies
pureComputed
数组:

self.activeSort = ko.observable(self.headers[0]);
self.sortMethod = ko.pureComputed(function() {
  var sortType = self.activeSort().sortType;
  switch (sortType) { /* return a function(a,b) { } */ }
});

self.sortedMovies = ko.pureComputed(function() {
  return self.movies().sort(self.sortMethod());
});
然后,
的数据绑定将是:

<select data-bind="value: activeSort, 
               options: headers, 
               optionsText: 'title'"></select>


更改此选项将更新
排序方法
,这将更新
已排序的视频

,您必须使用
绑定,而不是
更改
事件:

<select data-bind="value: sortMode, 
                   options: headers, 
                   optionsText: 'title'"></select>

针对您的特定代码/案例 在这里查看我的建议:

查看代码,我建议将
self.activeSort
设置为可观察的,引入名为
sortMethod
pureComputed
属性,以及名为
sortedMovies
pureComputed
数组:

self.activeSort = ko.observable(self.headers[0]);
self.sortMethod = ko.pureComputed(function() {
  var sortType = self.activeSort().sortType;
  switch (sortType) { /* return a function(a,b) { } */ }
});

self.sortedMovies = ko.pureComputed(function() {
  return self.movies().sort(self.sortMethod());
});
然后,
的数据绑定将是:

<select data-bind="value: activeSort, 
               options: headers, 
               optionsText: 'title'"></select>

更改此选项将更新
sorttmethod
,该方法将更新
sortedMovies