Как сопоставить одно свойство с другим с помощью Knockout Mapping?

У меня есть модель, определенная как

public class Model
{
    public string Name { get; set;}
}

и ViewModel в JS как

var vm = {
   name : ko.observable()
}

Кроме того, у меня есть обратный вызов, который должен обновить модель представления:

function callback(data)
{
   ko.mapping.fromJS(data, {}, viewModel);
}

Но для плагина ko.mapping свойство 'name' не равно 'Name'.

Как определить сопоставление «Имени» с «Именем»?


person Dmitriy Sosunov    schedule 13.02.2012    source источник


Ответы (1)


Прежде всего, вам не нужно указывать свойство name в модели представления, так как подключаемый модуль сопоставления добавит его за вас.

А для корпуса измените соглашение о сериализации, чтобы свойства были строчными.

Или вы можете сделать то, что сделал я, и принять заглавные буквы в вашей модели представления. Несмотря на то, что это не слишком хорошо сочетается с общими соглашениями Javascript, я принял это как «свойства, которые исходят от сервера».

Мне было очень удобно знать, какие из них созданы из сопоставления, а какие я использую для просмотра моделей. Конечно, вы не увидите сгенерированные/сопоставленные сервером свойства в вашей модели представления, но они будут там.

Я использую это, чтобы указать и создать модели представления на стороне сервера на сервере, сериализовать их и сопоставить с моими нокаутирующими моделями. Таким образом, я могу сосредоточиться только на поведении в моих моделях нокаутного представления.

Если вам нужно преобразовать какой-либо объект на стороне сервера в «объект» javascript, вы можете реализовать это преобразование в объекте сопоставления, как я делаю здесь

person Mikael Östberg    schedule 13.02.2012
comment
Хорошо, я вижу. Но могу ли я указать, добавив атрибуты для сериализатора JSON, чтобы сериализовать свои свойства на стороне сервера в соответствии с соглашениями об именах на стороне клиента? - person Dmitriy Sosunov; 14.02.2012