0

我想从嵌套在 ko.observable 对象中的数组中删除和添加一个元素。我正在使用 ko.mapping 实用程序将 json 数据映射到我的视图模型。在 json 数据中,我有一个数组,我想从中删除并添加一个元素。

add 和 remove 函数是从 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"
        }
    ]
}
4

0 回答 0