我有一个ASPNET mvc网站,该视图具有带剔除的viewmodel。我正在尝试将传递给视图的模型序列化为视图viewmodel。
该模型被传递给具有类似标准的ASPNET MVC的
@model Client.Controllers.TripDto
使用KO映射创建的剔除视图模型的完成方式如下
var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))';
var mvcModel = ko.mapping.fromJSON(jsonModel);
var viewModel = new TripViewModel();
var mapping = {
'ignore': ["expenses"]
};
ko.mapping.fromJS(mvcModel, mapping, viewModel);
ko.applyBindings(viewModel);
我在KO“自定义”视图模型上有财产支出。问题在于此属性不在MVC模型中,而只是一个稍后会获取其数据的属性。但是到目前为止,我还无法将模型无错误地传递到视图模型中
错误:无法解析绑定。消息:ReferenceError:费用未定义;绑定值:foreach:支出[中断此错误]
返回新的Function(“ $ context”,“ $ element”,functionBody);
我有点不确定映射是否真的失败了,但是到目前为止还看不到任何其他可能的错误。
所以问题是,是否可以在并非我要映射的模型中存在所有属性的情况下使用KO映射?
是否可以在并非所有属性都存在于我要映射的模型中的情况下使用KO映射?
我认为KO映射并不在乎这一点,但是模型在乎。当您调用ko.applyBindings
KO时,将搜索与HTML元素关联的属性,因此,如果要在HTML元素中使用该属性,data-bind='id: property'
则该属性必须存在于您的View-Model中。但是,如果它为null,那就可以了。
只需您需要扩展视图模型,以便包括expenses
具有默认值的新属性,例如null
var mapping = {
create: function (options) {
//customize at the root level.
var innerModel = ko.mapping.fromJS(options.data);
innerModel.expenses= null;
return innerModel;
}
}
请检查这个SO问题
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句