3

Angular のテーブルに ng-repeat があります。データは Parse から取得されます。

    <tr dir-paginate="ticket in tickets | orderBy:sortType:sortReverse | itemsPerPage: 10">
        <td><input type="checkbox" class="checkthis" /></td>
        <td>{{ ticket.id }}</td>
        <td>${{ ticket.get("total").toFixed(2) }}</td>
        <td>${{ ticket.get("tax").toFixed(2) }}</td>
        <td>{{ ticket.get("paymentType") }}</td>
        <td>{{ ticket.createdAt | date: 'short' }}</td>
    </tr>

orderBy 'id' または 'createdAt' を使用すると、並べ替えが正しく機能します。total、tax、または paymentType で注文するにはどうすればよいですか?

4

2 に答える 2

1

解析オブジェクトの属性は 経由でアクセスされます。フィルターはネイティブのゲッターに依存しているget()と思います。orderBy:

したがって、Angular では、バックボーン オブジェクトを拡張し、ネイティブのゲッターとセッターを提供するサービスを作成する方法があります。

(function() {
    'use strict';
    angular.module('myApp.services').factory('MyClass', f);

    function f() {

        var MyClass = Parse.Object.extend("MyClass", {
            // instance methods

            // manually built getter like this
            attributeA : function() {
                return this.get("attributeA");
            },

        }, {
            // class methods    
        });

        // or code-built getters/setters like this
        _.each(["attributeB", "attributeC"], function(p) {
            Object.defineProperty(MyClass.prototype, p, {
                get: function() {return this.get(p);},
                set: function(aValue) {this.set(p, aValue);}
            });
        });
        return MyClass;
    }
})();

orderBy の属性が必要ない場合でも、これはおそらく良い方法です。たとえば、サービス クラスは、promise を返すクエリを配置するのに適しています。

于 2015-05-05T00:29:41.240 に答える