2014-08-27 3 views
0

Я столкнулся с этим кодом для создания нового сотрудника с использованием нокаута js, и я надеюсь на некоторую помощь в попытке понять его?Реализация динамического добавления нокаута

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/Фамилия/Зарплата. Таким образом, приведенное выше высказывание отображает любую дополнительную функцию для функции createAdditionalEmployee - так, если в базе данных было сохранено 3 дополнительных пользователя, эта функция будет выполняться 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 (данные) и return ko.observable() для каждого поля, которое является тем, что попадает. Я предполагаю, что пользователь с экрана нажимает кнопку, чтобы добавить новую строку Employee.

ответ

0

Функция mapping.fromJS() автоматически создает наблюдаемые списки и свойства при задании модели. Из фрагмента, который вы предоставляете, разработчик решил настроить создание каждого из элементов в списке AdditionalEmployees в своей модели.

Функция createAdditionalEmployee() будет вызываться для каждого элемента в списке - так что вы правы, если в списке 3 элемента, тогда эта функция будет вызываться 3 раза. В этом случае параметр data НЕ будет пустым, поэтому новые объекты будут созданы снова с помощью функции mapping.fromJS().

Не видя всего примера, я подозреваю, что вы также правильно указали, что функция createAdditionalFunction() будет также использоваться, когда пользователь (предположительно) нажимает кнопку «Добавить» на экране, чтобы создать нового сотрудника, но в этом случай с NULL как параметр data.

Более подробную информацию о картографическом плагине fromJS() можно найти в разделе KnockoutJS documentation page.

Смежные вопросы