我正在尝试为表单上的按钮添加一个功能。我一直收到一条警告我未定义的消息。
我试图声明我的映射:
$(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}
]
答案 0 :(得分:2)
您正在尝试将json映射应用于映射对象,正确的语法
var viewModelJSON = ko.mapping.fromJS($.parseJSON('@Html.Raw(jsonData)'), mapping);
同样跳过映射,对于像这样的简单场景不需要它
ko.applyBindings(new CsvImportItem($.parseJSON('@Html.Raw(jsonData)')));