javascript - 从 Knockout.JS 中的数组中删除特定元素

标签 javascript html knockout.js

我正在通过网络创建多人游戏,因此我必须对网络事件使用react。

我有这个简单的代码,但是 removePlayer 方法不起作用。 addPlayer() 工作正常。

<table id="userlist2" class="tablesorter" cellspacing="0">
    <thead>
        <tr>
            <th>Name</th>
            <th>Queue</th>
            <th>Points</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: players">
        <tr>
            <td data-bind="text: name"></td>
            <td data-bind="text: queue"></td>
            <td data-bind="text: score"></td>
        </tr>
    </tbody>
</table>


function PlayerViewModel() {
    var self = this;
    self.players = ko.observableArray();

    self.addPlayer = function (Name, QueuePos, Score) {
        self.players.push({
            name: Name,
            queue: QueuePos,
            score: Score
        });
    }


    self.removePlayer = function (Name) {
        for (var i = 0; i < self.players().length; i++) {

            if (self.players()[i].name == Name) console.log(i);
            self.players().splice(i, 1);
        }
    }
}


players = new PlayerViewModel();
ko.applyBindings(players);

players.addPlayer('Player1', '0', '0');
players.addPlayer('Player2', '0', '0');
players.removePlayer('Player2');

这是 http://jsfiddle.net/xseTc/

最佳答案

您必须使用 remove function :

self.removePlayer = function (Name) {
    self.players.remove(function(player) {
        return player.name == Name;
    });
    
}

See fiddle

html

<table id="userlist2" class="tablesorter" cellspacing="0">
    <thead>
        <tr>
            <th>Name</th>
            <th>Queue</th>
            <th>Points</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: players">
        <tr>
            <td data-bind="text: name"></td>
            <td data-bind="text: queue"></td>
            <td data-bind="text: score"></td>
        </tr>
    </tbody>
</table>

javascript

function PlayerViewModel() {
    var self = this;
    
    self.players = ko.observableArray();  

    self.addPlayer = function (Name, QueuePos, Score) {
        self.players.push({
            name: Name,
            queue: QueuePos,
            score: Score
        });
    }

    self.removePlayer = function (Name) {
        self.players.remove(function(player) {
            return player.name == Name;
        });
    }
}

players = new PlayerViewModel();
ko.applyBindings(players);

players.addPlayer('Player1', '0', '0');
players.addPlayer('Player2', '0', '0');
players.removePlayer('Player2');

关于javascript - 从 Knockout.JS 中的数组中删除特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17630350/

相关文章:

c# - DuoCode 和 Knockout

javascript - AngularJS $location 目录

javascript - 根据单元格的值将 CSS 生成的图像分配给表格中的单元格

html - 在 Bootstrap 中更改下拉多选列表的样式

javascript - 如何将选定的日期从日期选择器获取到后端的方法

javascript - 从 KnockoutJS viewModel 获取值然后在另一个 viewModel 上调用它?

javascript - View 和 View 模型连接

JavaScript getElementById().value 返回一个值,但在分配给变量时给出 "Undefined"

c# - 使用 Javascript 确定单击了哪个 ASP.NET 按钮

html - display flex 和 display block 的 CSS 问题