Настройка модели представления knockoutJS для привязки к свойству «один ко многим» - PullRequest
1 голос
/ 15 декабря 2011

У меня есть контроллер в граалях, в который я отправляю сообщение JSON ajax с моделью представления knockoutJS.Модель представления (вместе с объектом javascript) выглядит следующим образом:

var childProperty= function(name, id) {
                this.name = name;
                this.id = id;    
            };

//KnockoutJS - Main view model
var viewModel = {
    id: ko.observable(1),
    childProperty: ko.observable(new childProperty("Chuck",1))
 }

Модель данных на стороне контроллера пытается автоматически использовать магию привязки Spring и привязать параметры запроса JSON к новому экземплярумоя модель данных выглядит так:

def jUpdate = {
        def update = new SomeObject(params)
}

Проблема возникает, когда я хочу, чтобы привязка Spring обнаружила, что childProperty.id является отношением один-ко-многим в модели данных, и начала извлекать связанное свойствов модели данных.Документация Grails гласит:

Привязка данных и ассоциации

Если у вас есть связь один-к-одному или многие-к-одному, вы можете использовать возможность привязки данных Grails дляобновить эти отношения тоже.Например, если у вас есть входящий запрос, например:

/ book / save? Author.id = 20

Grails автоматически определит суффикс .id в параметре запроса и выполнит поискЭкземпляр автора для данного идентификатора при выполнении привязки данных, например:

def b = новая книга (params)

Я использую служебную функцию ko.toJS, и простые свойствапривязка правильно.Как настроить дочернее свойство модели представления таким образом, чтобы при его публикации на контроллере grails Spring правильно обнаруживал его, извлекал связанную запись и строил объект?

1 Ответ

0 голосов
/ 07 января 2012

Мне так и не удалось заставить работать автоматические привязки пружин, поэтому я просто передал идентификатор дочерних объектов и вручную установил их на стороне сервера в карте параметров.После этого GORM выбирает запись соответствующим образом.Примерно так:

def update = {
 params.put("childObject.id",params.childObjectId)
 params.remove("childObjectId")

 def parentObject = new ParentObject(params)
}

Это выбирает связанные элементы и строит объект.Если бы у вас было много связанных полей, это стало бы болезненным процессом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...