Как сопоставить одно свойство другому с помощью Knockout Mapping? - PullRequest
2 голосов
/ 13 февраля 2012

Подскажите, пожалуйста, как решить следующее:

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

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'.

Господа, как определить отображение от «Имя» на «имя»?

1 Ответ

2 голосов
/ 13 февраля 2012

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

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

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

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

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

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

...