无法使用Ext JS 4中的列标题对网格行进行排序

时间:2016-11-24 12:14:57

标签: sorting extjs extjs4

我在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知识,正确方向上的一点非常有用。谢谢。

1 个答案:

答案 0 :(得分:2)

我现在设法解决了这个问题。问题发生在我的帐户商店。 以下代码阻止排序正常工作。

buffered: true,
pageSize: 200,
remoteSort: true,
purgePageCount: 0

因为它实际上并没有计算任何东西,而且只是从服务器中检索数据,所以我已经关闭了缓冲/远程排序。

我的代码现在看起来像这样,排序效果很好:

buffered: false,
remoteSort: false

希望这可以帮助其他有同样问题的人。