【问题标题】:How to remove an item from a models array in KnockoutJS如何从 KnockoutJS 中的模型数组中删除项目
【发布时间】:2012-10-17 10:03:12
【问题描述】:

我为此奋斗了一段时间,我需要一些帮助。我有一个用于渲染视图的 KO 模型和视图模型。在这种情况下,对象是一个带。这个乐队有一系列可观察的专辑。我只是不知道如何从乐队模型中删除专辑。

function band(item) {
    var self = this;
    self.name = ko.observable(item.name);
    self.country = ko.observable(item.country);
    self.state = ko.observable(item.state);
    self.city = ko.observable(item.city);
    self.emailAddress = ko.observable(item.emailAddress);
    self.albums = ko.observableArray(item.albums);
}

function User() {
    var self = this;
    self.bands = ko.observableArray([]);
    self.singleBand = ko.observable();

    //Get Bands from data source and create new models to add to bands array
    $.getJSON("/api/band", function (allData) {       
        $.each(allData, function (index, item) {
            self.bands.push(new band(item));
        });
    });

    //function to get a single band from a rendered list
    self.getThisBand = function (item) {
        self.bands = ko.observableArray(null);
        self.singleBand(item); 
    };

    //remove band from singleBands' album array
    self.removeAlbum = function (albumToDelete) {

        //how to delete album from band model
    };
}

ko.applyBindings(new User());

逻辑非常简单,我得到一个波段列表并将它们绑定到 UI 中的一个列表(没有问题)。当我在 UI 中单击乐队名称时,我会加载 getThisBand 方法并填充 UI(同样没有问题)。我已将 singleBand.albums 数组绑定到一个列表,并且该列表具有 femoveAlbum onclick 函数。传递给函数的数据也是正确的对象。

我缺少一些基本的东西吗?

【问题讨论】:

    标签: jquery knockout.js


    【解决方案1】:

    看起来self.singleBand() 将等于当前波段,所以在你的removeAlbum 函数中你可以这样做:

    //remove band from singleBands' album array
    self.removeAlbum = function (albumToDelete) {
        var band = self.singleBand();
        band.albums.remove(albumToDelete);
    };
    

    【讨论】:

    • 非常感谢!那成功了。我已经和KO一起玩了几天,我喜欢它。感谢您帮助我!
    • 太棒了。很高兴你到目前为止喜欢它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2021-10-19
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多