2

我有一个 ASPNET mvc 站点,其中视图具有带有敲除的视图模型。我正在尝试将传递给视图的模型序列化为视图视图模型。

模型通过类似标准的 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:费用 [中断此错误]

return new Function("$context", "$element", functionBody);

我有点不确定是否真的是映射失败,但到目前为止还看不到任何可能的错误。

所以问题是,是否可以在我正在映射的模型中不存在所有属性的情况下使用 KO 映射?

4

1 回答 1

2

是否可以在我正在映射的模型中不存在所有属性的情况下使用 KO 映射?

我认为 KO 映射并不关心这一点,但模型关心。当您调用ko.applyBindingsKO 时,将搜索与 HTML 元素关联的属性,因此如果您要在 HTML 元素中使用属性,data-bind='id: property'那么该属性必须存在于您的 View-Model 中。但如果它为空,那就没关系。

只需要扩展您的视图模型,以便包含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 问题

于 2013-08-11T15:39:44.843 回答