1

我正在尝试向表单上的按钮添加功能。我不断收到一条消息说 alertMe 未定义。

我试图这样声明我的映射:

$(function () {

        var mapping = {
            create: function (options) {
                return new CsvImportItem(options.data);
            },
            alertMe: function () {
                alert('Here we go');
            }
        }


        var CsvImportItem = function (data) {
            ko.mapping.fromJS(data, {}, this);

            this.rowClass = ko.computed(function () {
                if (this.Accepted()) return 'success'; else return 'error';
            }, this);

            this.acceptItem = function () {
                this.Accepted(true);
            };

            this.declineItem = function () {
                this.Accepted(false);
            };

        }
        var viewModelJSON = ko.mapping.fromJS($.parseJSON('@Html.Raw(jsonData)'), mapping);

        ko.applyBindings(viewModelJSON);
    });

如果我将 viewModelJSON 更改为:

var viewModelJSON = ko.mapping.fromJS($.parseJSON('@Html.Raw(jsonData)'), {}, mapping);

然后 alertMe 函数调用有效,但我的其余显示项目无效。关于我做错了什么的任何想法?

更新以显示数据结构

我进入视图的数据结构是类型

IEnumberable<Project.Namespace.CsvImportItem>

因此,我得到这样的结构:

[
 {CsvImportItem},
 {CsvImportItem},
 {CsvImportItem}
]
4

1 回答 1

2

您正在尝试将 json 映射应用于映射对象,语法正确

var viewModelJSON = ko.mapping.fromJS($.parseJSON('@Html.Raw(jsonData)'), mapping);

也跳过映射,像这样的简单场景不需要它只是做

ko.applyBindings(new CsvImportItem($.parseJSON('@Html.Raw(jsonData)')));
于 2012-11-27T09:32:24.497 回答