2013-08-05 4 views
0

Я создал метод, вызываемый с помощью нг щелкните событие в моей HTML:

<div ng-repeat="section in model.sections"> 
    <a ng-click="updateSection($index)"> 
</div> 

Тогда в моем файла JavaScript, у меня были следующие услуги:

.factory('Sections', function($resource){ 
    return{ 
     onUnits: $resource('/api/sections/:uuid/units', {uuid:'@sectionUUID'}, { 
      get: {method: 'GET', params:{uuid: '@uuid'}, isArray:true} 
     } 
    } 
} 

метод вызывается из HTML является:

$scope.updateSection = function(index){ 
    $scope.model.sections[index].sectionUnits = Sections.onUnits.get({uuid: $scope.model.sections[index].sectionUUID} 
     ,console.log($scope.model.sections[index]) 
     ); 
    } 

, прежде чем произойдет это обновление,

$scope.model.sections[0].sectionUnits == ['d1','d2'] 

, который является списком идентификаторов единиц, связанных с этим разделом. Этот метод в основном обновляет этот список с реальными unit объектов, выглядит следующим образом:

.sectionUnits = [{unitUUID: 'd1', 
        materials: ['m1','m2','m3'] 
        }, {... }] 

в моем браузере, приведенный выше код возвращает обновленный section объект, который я искал, со всеми unit объектов, вложенных под section.

Однако, что я действительно хотел, было реализовать обратный вызов, который принимает список идентификаторов всех materials, связанных с устройством в этом обновленном объекте section, и извлекает их.

Если я пытаюсь это, и иметь следующий обратный вызов вместо этого, я получаю список sectionUnits, что до сих пор только идентификаторы:

$scope.updateSection = function(index){ 
    $scope.model.sections[index].sectionUnits = Sections.onUnits.get({uuid: $scope.model.sections[index].sectionUUID} 
     ,console.log($scope.model.sections[index].sectionUnits) 
     ); 
    } 

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

Спасибо!

ответ

1

Образец, с которым я столкнулся больше всего, - это создать объект ресурса, а затем выполнить назначения в обратном вызове. Таким образом, вместо текущей updateSections функции, вы бы:

$scope.updateSection = function(index) { 
    Sections.onUnits.get(
     {uuid: $scope.model.sections[index].sectionUUID}, 
     function(results) {$scope.model.sections[index].sectionUnits = results} 
    ) 
} 

Я думаю, что в вашем коде не реально получить назначены результаты GET, поэтому вы получаете обратно исходный массив идентификаторов ,

Обратите внимание, что присваивание происходит только при успешном GET ресурса. У вас должен быть отдельный обратный вызов для обработки любых ошибок.

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

Если вы хотите запросы цепи таким образом, что после получения раздела, Вы получаете материалы, то вы могли бы сделать, что в вашем обратном вызове, сразу после присвоения .:

$scope.updateSection = function(index) { 
    Sections.onUnits.get(
     {uuid: $scope.model.sections[index].sectionUUID}, 
     function(results) { 
      $scope.model.sections[index].sectionUnits = results; 
      // Should contain some looping mechanism since results is an array. 
      $scope.getMaterials(results); 
     } 
    ) 
} 

пар других заметок на ваш код:

  • Что-то кажется неправильным в отношении вашего первоначального вызова метода для получения ресурса.В этот момент вы говорите, что объект sectionUnits представляет собой массив строк, но ваш вызов метода updateSection() пытается ссылаться на массив как объект. Вы говорите, что можете получить распечатку в консоли, поэтому я предполагаю, что она работает, но вы только что сделали опечатку
  • Кажется, плохая идея мутировать объект sectionUnits из массива строк в объекты массива. Возможно инициализировать его как .sectionUnits = [{unitUUID:'d1'}, {unitUUID:'d2'}]?
  • Возможно, вы захотите взглянуть на Restangular, который в основном обертывает $resource, чтобы быть более удобным. Я нашел, что с ним очень легко работать.
+0

Wow ... Спасибо! это именно то, что мне нужно. – episodeyang

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