Angular / Breeze - камила Калъф в моделна подвързия

Тъкмо започвам да уча Angular и работих с курса на John Papa за Pluralsight, за да се опитам да го разбера. Имах проблем със свързването на някои данни към страница и се оказа, че малките букви са неправилни.

Имах:

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

когато трябваше да имам:

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

Това е добре, но просто не мога да разбера защо.

Данните се връщат от Web API с този метод (забележете, че няма camelcase на времеви интервали):

    [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 (с camelCase).

Какво се случва тук, налага ли се конвенция за корпус на HTML от Angular?

РЕДАКТИРАНЕ: Благодаря на Уорд за отговора. За всеки, който следва същия курс и има подобен въпрос, breeze.NamingConvention.camelCase.setAsDefault() се извиква в entityManagerFactory.js.


person Nathan Power    schedule 20.12.2013    source източник


Отговори (1)


Проблемът е малко "небрежност" в изписването на "TimeSlot" на различни места.

Вашето обвързване към "s" е обвързване към типа Session. Самият тип Session диктува изписването на което и да е от неговите свойства за навигация. Всичко останало е без значение.

Метаданните за Session се генерират на сървъра въз основа на класа C# "Session". Там ще откриете, че свойството за навигация е изписано „TimeSlot“.

Вашият клиент използва Breeze NamingConvention.camelCase за превод между предпочитания PascalCasing на C# и предпочитания camelCasing в приложенията на JavaScript. Следователно на клиента Breeze трябва да очаквате навигационното свойство „TimeSlot“ да стане „timeSlot“.

Имената на обекти не се превеждат от NamingConvention (в момента). Типът C#, "TimeSlot" също се изписва "TimeSlot" за типа JavaScript.

Всеки друг правопис навсякъде другаде е без значение за това обвързване.

Може да намерите документацията „Query result debugging“ полезна тема.

person Ward    schedule 20.12.2013