1

我是一个 knockoutjs 新手,基本上我想要在页面上做的是,我在视图中加载一个激活详细信息列表,每个列表都有一个与列表项关联的删除链接。每个激活明细项包含三个属性,index、ActivationDate 和 ExpiryDate,例如。

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

现在,每次用户在任何特定项目上单击删除。它应该重新排序所有列表索引以仍然反映正确增加的索引。例如,如果删除了第 2 项,则为 1,2,3,4 而不是 1,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在绑定中使用敲除对象,foreach并且 ko 自己完成所有工作。请参阅此处的示例: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 回答