2015-02-18 3 views
0

Breeze & Угловой & MV *Как сохранить дочерние свойства?

я получаю объект счета и расширить это необходимые свойства: Customer, Деталь и т.д.

Чтобы получить доступ к детализации свойств легко, invoice.detail [п] .Property Свойства. И сохранить изменения в существующих свойствах (1 - n) также легко. В моем пользовательском интерфейсе я просто прокручиваю свой объект vm.invoice.details, чтобы получить & отображение всех существующих деталей, привязать их к входам, отредактировать по желанию, вызвать saveChanges(), сделать!

(имейте в виду, в этом интерфейсе, мне нужно выполнить следующие действия тоже ....)

Теперь у меня есть чистые материалы для новой детали мне нужно вставить.

Однако мне нужно вставить новую деталь в существующий массив деталей счета-фактуры.

Например: счет-фактура № 5 содержит 3 детали (подробно [0], подробно [1], подробно [2]). Мне нужно вставить этот существующий счет-фактуру, подробно [3], и вызвать saveChanges()

Я попытался вызвать manger.createEntity ('invoice'), но он жалуется на ограничения FK. Я знаю, что вы можете передавать значения в качестве второго аргумента в createEntity ('obj', newvalues) ... но является ли это правильным и единственным методом?

Кажется, все должно быть намного проще, но, ну, я в недоумении, пожалуйста, помогите, где вы можете. ТИА!

ответ

1

Посмотрите на DocCode sample, который имеет испытания для всех видов сценариев, включая этот.

Возможно следующее проанализи- вы ищете:

function addNewDetail() { 
    var newDetail = manager.createEntity('Detail', { 
     invoice: vm.currentInvoice, 
     ... other initial values 
    }); 

    // the newDetail will show up automatically if the view is bound to vm.details 
} 

Обратите внимание, что я инициализацию навигации свойства родительского invoice. С другой стороны, я мог бы просто установить свойство FK в Detail субъекта внутри инициализаторе:

... 
invoiceId: vm.currentInvoice.id, 
... 

В любом случае, Breeze добавит новую деталь к details коллекции currentInvoice.

Ваш вопрос говорил с точки зрения вставки новый Detail.Нет необходимости вставлять новый Detail вручную, и вы не можете управлять порядком сортировки свойства vm.currentInvoice.details любым способом.

Breeze имеет no понятие о порядке сортировки для сбора навигационных свойств.

Если вам нужно просмотреть подробную информацию в конкретном порядке, вы можете добавить фильтр сортировки в свое угловое связывание с vm.currentInvoice.details.

+0

Благодарим вас за отличный ответ! Вот как я закончил это: В моем ** контроллере ** я вызываю функцию, которая выглядит так: 'var d = dataservice.createNewDetail (vm.invoice); d.SeqNumber = (vm.invoice.InvoiceDetails.length + 1); vm.invoice.InvoiceDetails.push (d); ' Тогда моя функция dataservice должна быть не более ' return manager.createEntity ('InvoiceDetail') ' Я первоначально подошел к ней, как вы предлагали, см. Мой OP (_ I знаете, что вы можете передавать значения в качестве второго аргумента в createEntity ('obj', newvalues) ... но является ли это правильным и единственным методом? _) – SSIDEV

+0

Могу ли я принять ответ? На самом деле, ваше предложение (в то время как другое) вызывает новый вопрос: какой подход является правильным? Я думаю, это сводится к тому, что лучше всего работает в вашей среде MV *? Если вы видите слабость или опасность в моем подходе, проконсультируйтесь далее. Иначе мы можем назвать это закрытым. Всего наилучшего! – SSIDEV

+0

Существует небольшая разница, которая не имеет значения в вашем случае. Если вы установите свойство nav, Breeze обеспечит, чтобы оба родителя и ребенка находились в одном и том же «EntityManager» (выбрасывает, если они не являются). Установка идентификатора FK не налагает этот тест и будет подключать новый дочерний элемент 'Detail' к родительскому' Invoice', если этот счет-фактура присутствует в менеджере ребенка. Не проблема для вас, поскольку у вас есть только один менеджер. Выберите подход, который вам лучше всего подходит. – Ward

0

Убедитесь, что вы правильно EntityName, потому что иногда создает объект является не так просто, как seems.Before работы с лицами см

http://www.getbreezenow.com/documentation/creating-entities

Я предлагаю вам посмотреть ур метаданные файл, перейдите в последнюю строку файла, вы можете увидеть поле под названием «EntitySet»

"entitySet":{"name":"Entity_Name","entityType":"Self.Entity_Name"} 

Проверьте EntityName здесь я приняли как «ENTITY_NAME», а затем попытаться создать объект и использовать это имя

manger.createEntity('Entity_Name'); 
+0

Да. Очень хорошее предложение, спасибо. Я проверил правильность своей сущности, скопировав некоторые начальные значения и используя их в качестве второго параметра для createEntity. Это успешно добавило новые значения и подтвердило, что мой объект правильно назван. – SSIDEV