我正在使用mvc4中的模型在Knockout中创建一个视图模型。我正在使用映射插件。目前的代码看起来像这样。
首先:我将我需要的不同MVC4模型合并到一个ko视图模型中。
var mergedData = $.extend(true, {}, initialEventData,
{ "Tickets": initialTicketData }, { "TimeZones": timeZones }
);
第二:我添加一些映射以将计算函数添加到我的viewmodel。
var mapping = {
'Tickets': {
create: function (options) {
return new updatedTicket(options.data);
}
}
}
var updatedTicket = function (data) {
ko.mapping.fromJS(data, {}, this);
this.formattedPrice = ko.computed(function () {
return "$" + parseFloat(this.Price()).toFixed(2);
}, this);
}
Finlly:我应用绑定。
var eventViewModel = ko.mapping.fromJS(mergedData, mapping);
然而:有时候,Tickets模型可能会变空。发生这种情况时,映射插件不会创建可观察数组(显然)。我需要创建一个带有映射属性的空数组,以便我可以推送新票。
答案 0 :(得分:0)
我只想添加一个检查映射配置。检查updatedTicket函数中是否存在数据,如果不存在,则手动创建可观察数组
答案 1 :(得分:0)
只需创建一个容器视图模型,您可以在其中创建默认票证数组... 同样在你的回调函数中,请确保使用一个引用“this”的变量
var mapping = {
'Tickets': {
create: function (options) {
return new updatedTicket(options.data);
}
}
}
var updatedTicket = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, this);
this.formattedPrice = ko.computed(function () {
return "$" + parseFloat(self.Price()).toFixed(2);
}, this);
}
var viewModel = function ( ) {
this.Tickets = ko.observableArray([]);
ko.mapping.fromJS(mergedData, mapping, this);
}
var eventViewModel = new viewModel();