2013-12-20 3 views
0

Я только начинаю изучать Угловые и работаю с курсом Джона Папы на Pluralsight, чтобы попытаться окунуться в него. У меня возникла проблема с привязкой некоторых данных к странице, и она оказалась неправильной оболочкой.Angular/Breeze - camelCasing в привязке к модели

Я имел:

<small>{{s.timeslot.name}}</small> at <small>{{s.room.name}}</small> 

, когда я должен был:

<small>{{s.timeSlot.name}}</small> at <small>{{s.room.name}}</small> 

Это хорошо, но я просто не могу понять, почему.

Данные возвращаются из Web API с помощью этого метода (обратите внимание, не верблюжьего на временных интервалах):

[HttpGet] 
    public object Lookups() 
    { 
     var rooms = _repository.Rooms; 
     var tracks = _repository.Tracks; 
     var timeslots = _repository.TimeSlots; 
     return new { rooms, tracks, timeslots }; 
    } 

Угловое сервис называется datacontext.js имеет следующий объект для отображения между (по крайней мере, по моему пониманию) Имена веб-API и имена объектов Breeze.

var entityNames = { 
     attendee: 'Person', 
     person: 'Person', 
     speaker: 'Person', 
     session: 'Session', 
     room: 'Room', 
     track: 'Track', 
     timeslot: 'TimeSlot' 
    } 

Есть некоторые дополнительные функции, которые включают кэширование данных и расширения модели на клиенте, но нигде нет ссылки на Timeslot (с верблюжьего).

Что здесь происходит, это соглашение для оболочки HTML, выполняемое угловым?

EDIT: Спасибо Уорду за ответ. Для тех, кто следит за тем же курсом, у которого есть аналогичный вопрос, breeze.NamingConvention.camelCase.setAsDefault() вызывается в entityManagerFactory.js.

ответ

1

Проблема заключается в «небрежности» в написании «TimeSlot» в разных местах.

Ваше связывание с «s» является обязательным для типа Session. Сам тип Session диктует правописание любых его навигационных свойств. Все остальное не имеет значения.

Метаданные для Session генерируются на сервере, основанные на классе C#. Там вы обнаружите, что свойство навигации написано «TimeSlot».

Ваш клиент использует Breeze NamingConvention.camelCase для перевода между предпочтительным PascalCasing C# и предпочтительным camelCasing в приложениях JavaScript. Поэтому на клиенте Breeze вы должны ожидать, что свойство навигации TimeSlot станет «timeSlot».

Имена предприятий не переведены на NamingConvention (в настоящее время). Тип C# «TimeSlot» также записывает «TimeSlot» для типа JavaScript.

Каждое другое правописание во всем мире не имеет отношения к этой привязке.

Вы можете найти полезную тему документации «Query result debugging».

+0

Очень полезно, спасибо за это. –

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