Knockoutjs:从嵌套在viewmodel中的数组中删除/添加元素

时间:2013-03-19 18:27:06

标签: javascript knockout.js

我想从一个嵌套在ko.observable对象中的数组中删除并添加一个元素。我使用ko.mapping实用程序将json数据映射到我的viewmodel。在json数据里面我有一个数组,我想删除这个数组并添加一个元素。

添加和删除功能是从HTML绑定调用的。

请参阅我目前的代码。它根本不优雅,我知道,这就是我寻求帮助的原因。我怎么看才聪明?

function BaseViewModel() {
    var self = this;

    self.newItem = null;
    self.selectedItem = ko.observable();

    self.getNewItem = function () {
        return self.newCleanItem(self.newItem);
    }

    self.read = function (search, callback) {
        self.baseService.read(search, callback);
    }

    self.readCallback = function (data) {
        if (self.newItem == null)
            self.newItem = data;
        self.selectedItem(data);
        showInputContainer();
    }

    self.addLog = function () {
        var item = new self.getNewItem();
        var newItem = item.tLogs[0];
        var currentSelectedItem = ko.mapping.toJS(self.selectedItem);
        currentSelectedItem.tLogs.push(newItem);
        self.selectedItem(currentSelectedItem);
        showInputContainer(activeTab);
    };

    self.removeLog = function (item) {
        var currentSelectedItem = ko.mapping.toJS(self.selectedItem);
        currentSelectedItem.tLogs.pop(item);
        vm.selectedItem(currentSelectedItem);
        showInputContainer();
    }

    self.newCleanItem = function (data) {
        for (var d in data) {
            if (Object.prototype.toString.call(data[d]) === '[object Array]') {
                var array = data[d];
                for (var item in array) {
                    if (framework.baseFunctions().isNumeric(item)) {
                        for (var i in array[item]) {
                            array[i] = "";
                        }
                    }
                }
                data[d] = array;
            }
            else {
                data[d] = "";
            }
        }

        return data;
    }
}

我的jsondata可以看出这个:

jsondata = {
    caseName: "test",
    caseDescription: "This is a test",
    tLogs: [
        {
            name: "log1",
            date: "2013-03-19"
        },
        {
            name: "log2",
            date: "2013-02-02"
        }
    ]
}

0 个答案:

没有答案