我有一个ASPNET mvc网站,视图有淘汰视图模型。我正在尝试将传递给视图的模型序列化到视图视图模型中。
模型传递给类似标准的aspnet mvc
@model Client.Controllers.TripDto
使用KO映射创建的knockout viewmodel就像
一样 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:费用 [打破此错误]
返回新函数(“$ context”,“$ element”,functionBody);
我有点不确定它是否确实是映射失败,但到目前为止无法看到任何可能的错误。
所以问题是,是否有可能使用KO映射,而我所映射的模型中并不存在所有属性?
答案 0 :(得分:2)
是否可以使用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 question