删除可观察数组中的属性

时间:2012-12-19 19:56:41

标签: javascript knockout.js

如果我定义像

这样的对象
var Person = function(id, name, country) {
    var self = this;
    self.id = ko.observable(id);
    self.name = ko.observable(name);
    self.country = ko.observable(country); 

    return self;
};

如何在按钮的点击事件中从此对象中删除属性“country”。事情是,当我向webservice发送数据时,我不想将此属性发送给它。

请在此处查看小提琴,我试图在保存按钮的点击事件中删除属性“country”。 http://jsfiddle.net/kirannandedkar/nZDrk/7/

3 个答案:

答案 0 :(得分:1)

您可以使用delete关键字从对象中完全删除属性:

var somePerson = new Person(1, 'blah', 'blah');
delete somePerson.country;
// send somePerson to the webservice

答案 1 :(得分:1)

您必须从所有对象中删除此属性:

this.SaveDetail = function() {
    ko.utils.arrayForEach(people(), function(item){
        delete item["country"];                 
    });
};

这是工作小提琴:http://jsfiddle.net/nZDrk/8/

答案 2 :(得分:0)

由于您要将数据发送到此Web服务,您应该做的是在对象上实现toJSON()函数并删除该属性。然后在模型上发送调用ko.toJSON()的结果。这样,您的模型仍然包含属性,但您发送的内容已删除属性。

var Person = function(id, name, country) {
    var self = this;
    self.id = ko.observable(id);
    self.name = ko.observable(name);
    self.country = ko.observable(country); 

    self.toJSON = function () {
        var data = ko.toJS(self); // get the values of this model
        // delete the property from the data
        delete data.country;
        return data;
    };
};

var person = new Person(1, 'foo', 'bar');
var data = ko.toJSON(person); // {"id":1,"name":"foo"}