执行淘汰赛动态添加行

时间:2014-08-27 21:13:18

标签: javascript jquery knockout.js

我遇到过这个代码,用于使用knockout js创建一个新的Employee,我希望在尝试理解它时有一些帮助吗?

创建了mvcModel变量 - var mvcModel = @Html.Raw(Json.Encode(Model))

var viewModel = ko.mapping.fromJS(mvcModel, {
    'AdditionalEmployees': {
        create: function(options) { return createAdditionalEmployee(options.data); }
    }
  });

因此在MVC模型中有一个List<AdditionalEmployee> AdditionalEmployees,而AdditionalEmployee是一个具有FirstName / Surname / Salary的类。上面说的是将任何AdditionalEmployees映射到createAdditionalEmployee函数 - 所以如果在DB中保存了3个AdditionalEmployees,那么当页面加载创建这3行时,这个函数会运行3次吗?

我也想知道传递给函数的选项是什么,然后是options.data是什么?

最后,createAdditionalEmployee函数如下:

  var createAdditionalEmployee = function (data) {
        if (data) {
            return ko.mapping.fromJS(data);
        } else {
            return {
                Id: ko.observable(),
                FirstName: ko.observable(),
                Surname: ko.observable(),
                Salary: ko.observable()
            };
        }
    };

我想知道的是,数据列表中的项目可以传递 - 以及返回ko.mapping.fromJS(数据)和返回ko.observable()之间的差异,每个字段都被命中我认为如果屏幕上的用户单击按钮以添加新的员工行

1 个答案:

答案 0 :(得分:0)

mapping.fromJS()函数在给定模型时自动创建可观察列表和属性。从您提供的代码段开发,开发人员决定在他/她的模型中自定义AdditionalEmployees列表中每个元素的创建。

将为列表中的每个项目调用函数createAdditionalEmployee() - 所以你是正确的,如果列表中有3个项目,那么该函数将被调用3次。在这种情况下,data参数不会为空,因此将使用mapping.fromJS()函数再次创建新对象。

如果没有看到整个示例,我怀疑你也是正确的说,当用户(假设)按下屏幕上的“添加”按钮创建新员工时,也会使用createAdditionalFunction()功能,但在这种情况下,NULL为data参数。

您可以在KnockoutJS documentation page中找到有关映射插件fromJS()函数的详细信息并进行自定义。