【问题标题】:Forcing ko.mapping to create an empty array with mapped properties强制 ko.mapping 创建一个具有映射属性的空数组
【发布时间】:2012-06-17 19:14:22
【问题描述】:

我正在从 mvc4 中的模型在 Knockout 中创建视图模型。我正在使用映射插件。当前代码如下所示。

首先:我将需要的不同 MVC4 模型合并到一个 ko 视图模型中。

var mergedData = $.extend(true, {}, initialEventData,
    { "Tickets": initialTicketData }, { "TimeZones": timeZones }
);

第二个:我添加一些映射以将计算函数添加到我的视图模型。

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);
}

最后:我应用绑定。

var eventViewModel = ko.mapping.fromJS(mergedData, mapping);

但是: 有时,Tickets 模型可能会返回空。发生这种情况时,映射插件不会创建可观察数组(显然)。我需要创建一个带有映射属性的空数组,以便推送新票。

【问题讨论】:

    标签: asp.net-mvc knockout.js knockout-mapping-plugin


    【解决方案1】:

    我只想在映射配置中添加一个检查。检查数据是否在 updatedTicket 函数中,如果没有,手动创建一个 observable 数组

    【讨论】:

      【解决方案2】:

      只需创建一个容器视图模型,您就可以在其中创建默认票证数组... 同样在你的回调函数中,确保你使用一个引用“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();
      

      【讨论】:

      • 我会更改 this.Tickets 以增加几行。 var viewModel=function(data) { var data = data || {},tickets = data.tickets;} -- 如果我知道如何在 markdown 中格式化,那就填满了!?
      猜你喜欢
      • 2020-10-05
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多