【发布时间】:2012-11-27 20:51:14
【问题描述】:
我正在尝试向表单上的按钮添加功能。我不断收到一条消息说 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}
]
【问题讨论】:
-
为什么要在映射中添加
alertMe?为什么只将alertMe定义放在CsvImportItem对象上? -
我希望函数在 CsvImportItems 的集合上工作,而不是在 1 个 CsvImportItem 的实例上工作,例如我的函数 rowClass、acceptItem 和dendItem。我会更新我的帖子,让我的数据更清晰。
标签: knockout.js knockout-mapping-plugin