我在Ext JS中有一个现有的Web应用程序,我无法按升序和降序排序。当我点击列标题时,该选项可用于排序,但数据实际上并未排序,它似乎只是以相同的顺序刷新。
在Chrome控制台中,我可以看到写入以下日志:
protocol AnimatorType {
func animate(view: UIView)
}
class Animator: AnimatorType {
func animate(view: UIView) {
view.transform = CGAffineTransform(translationX: -30, y: 0)
UIView.animate(withDuration: 0.3, animations: {
view.transform = CGAffineTransform.identity
})
}
}
class TableViewDataSource:NSObject, UITableViewDataSource {
let data = Array(0 ..< 30).map{ $0 * $0 }
init(tableView: UITableView) {
self.tableView = tableView
super.init()
tableView.dataSource = self
}
weak var tableView: UITableView?
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath)
let v = data[indexPath.row]
cell.textLabel?.text = "\(v)"
return cell
}
func object(at indexPath: IndexPath) -> Int{
return self.data[indexPath.row]
}
}
class TableViewDelegate:NSObject, UITableViewDelegate {
var willDisplayCell: ((UITableView, UITableViewCell, IndexPath) -> Void)?
var didSelectCell: ((UITableView, IndexPath) -> Void)?
let animator: AnimatorType
weak var tableView: UITableView?
init(tableView: UITableView, animator: AnimatorType) {
self.tableView = tableView
self.animator = animator
super.init()
tableView.delegate = self
}
private var highestIndexPath = IndexPath(row: -1, section: 0)
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath ) {
if indexPath.row > highestIndexPath.row {
animator.animate(view: cell)
highestIndexPath = indexPath
}
willDisplayCell?(tableView, cell, indexPath)
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
didSelectCell?(tableView, indexPath)
}
}
class ViewController: UIViewController {
var tableViewDataSource: TableViewDataSource?
var tableViewDelegate: TableViewDelegate?
let animator = Animator()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableViewDataSource = TableViewDataSource(tableView: tableView)
self.tableViewDelegate = TableViewDelegate(tableView: tableView, animator: animator)
self.tableViewDelegate?.didSelectCell = {
[weak self] tableView, indexPath in
guard let `self` = self else { return }
print("selected: \(self.tableViewDataSource!.object(at: indexPath))")
}
}
}
每当我尝试点击列标题(例如名字)时,就会出现这种情况,它会指示我进入“afterRequest”功能。
Column Headers http://i68.tinypic.com/2qi1vuu.png
Request result: true
属性中包含每列的“sortable:true”,以及整个网格的“defaultSortable:true”。
对于控制器,此处没有太多代码,除了调用服务器的功能,该服务器以 JSON 格式请求相关帐户数据并且应该将其加载到商店。正如您在上面的屏幕截图中看到的,它似乎正在加载正确的数据。
我只使用Ext JS 4.0.7 2天,并且之前没有Javascript知识,正确方向上的一点非常有用。谢谢。
答案 0 :(得分:2)
我现在设法解决了这个问题。问题发生在我的帐户商店。 以下代码阻止排序正常工作。
buffered: true,
pageSize: 200,
remoteSort: true,
purgePageCount: 0
因为它实际上并没有计算任何东西,而且只是从服务器中检索数据,所以我已经关闭了缓冲/远程排序。
我的代码现在看起来像这样,排序效果很好:
buffered: false,
remoteSort: false
希望这可以帮助其他有同样问题的人。