1

私はノックアウトjsの初心者です。基本的にページでやりたいことは、ビューにアクティブ化の詳細のリストをロードし、それぞれにリスト項目に関連付けられた削除リンクを付けることです。各アクティブ化の詳細項目には、index、ActivationDate、および ExpiryDate の 3 つのプロパティが含まれています。

    var activationItem = {
            'index': count,
            'activationDate': item.activationDate,
            'expiryDate': item.expiryDate
        };

これで、ユーザーが特定のアイテムで削除をクリックするたびに。すべてのリストのインデックスを並べ替えて、適切にインクリメントされたインデックスを引き続き反映する必要があります。たとえば、アイテム 2 が削除された場合、1,3,4 の代わりに 1,2,3,4 になります。

どのようにそれが行われたかは、アレイを置き換えることです。次のように:

       //Removes selected item from activationlist
self.RemoveActivationListItem_Click = function () {

    self.activationListItems.remove(this);

    var count = 1;
    var replaceArray = ko.observable([]);

    //Re index all of the array items
    ko.utils.arrayForEach(self.activationListItems(), function(item) {

        var activationItem = {
            'index': count,
            'activationDate': item.activationDate,
            'expiryDate': item.expiryDate
        };

        replaceArray().push(activationItem);

        count++;

    });

    self.activationListItems.removeAll();
    self.activationListItems(replaceArray());

    TINY.box.show({ html: "Activation item removed", animate: true, close: false, boxid: 'message',autohide:5,top:90,left:0});

};

これより良い方法はありませんか?

4

1 に答える 1

1

表示indexプロパティだけが必要な場合は、バインディングで$indexノックアウト オブジェクトを使用でき、ko はすべての作業を自分で行います。foreachここで例を参照してください: http://jsfiddle.net/AfDQe/1/

ビューモデルにインデックスを保存する必要がある場合は、削除機能を簡素化できます。

self.RemoveActivationListItem_Click = function () {
    self.activationListItems.remove(this);
    var count = 1;

    //Re index all of the array items
    ko.utils.arrayForEach(self.activationListItems(), function(item) {
        item.index = count;
        count++;

    });

    TINY.box.show({ html: "Activation item removed", animate: true, close: false, boxid: 'message',autohide:5,top:90,left:0});

};
于 2012-10-11T13:13:10.027 に答える