2013-05-22 2 views
2

Мои данные JSON выглядит какangularjs нг-модель не работает после того, как с использованием собственного определяется директивой

[{имя: "а", содержание: [{имя: "б", содержание: [ {name: "c", id: 1}, {...}]}, {...}]}, {name: "...", content: [...]}]

и я хочу поместить его в выборку, которая «a» и «b» - все опцииGroup, только опция «c» является опцией. так:


-b

  с

Образец jsfidle здесь: http://jsfiddle.net/sunny_jerry/SHxBp/

Кажется "ngOptions" не может удовлетворить мои требования , поэтому я определяю такую ​​директиву:

<select class="compo-tree" x-compo-tree colleges="colleges" ng-model="choice"></select> 

directive('compoTreeNew', function($compile) { 
    return { 
     restrict: 'A', 
     scope: { 
      colleges: "=colleges", 
      choice: "=ngModel" 
     }, 
     link: function($scope, elm){ 
      $scope.$watch("colleges", function(){ 
       angular.forEach($scope.colleges, function(college) { 
        elm.append($("<optgroup>").attr("label", college.name)); 
        angular.forEach(college["departments"], function(department) { 
         var optGroup = $("<optgroup>").attr("label", '- ' + department.name); 
         angular.forEach(department['disciplines'], function(discipline) { 
          optGroup.append($("<option>").attr("value", discipline.id).text(discipline.name)); 
          if (!$scope.choice) { $scope.choice = discipline.id; } 
         }); 
         elm.append(optGroup); 
        }); 
       }); 
      }); 
     } 
    } 
}); 

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

Но я обнаружил, что не могу установить значение инициализации по выбору, а затем я обнаружил, что не могу выбрать какой-либо выбор для управления «выбором» в любое время, выбор кажется односторонним, но мне нужно, чтобы оно стало двусторонняя привязка.

Образец jsfidle здесь: http://jsfiddle.net/sunny_jerry/SHxBp/

Как я могу это исправить?

+0

Одна вещь, чтобы иметь в виду, что каждый элемент имеет только один объем. Поскольку ваша директива 'compoTreeNew' использует область выделения, это единственная область действия в элементе и она отключена от родительской области. Это может иметь побочный эффект взлома встроенной функции ng-model/selectController для этого же элемента. – jpsimons

+0

@ darkporter Вы имеете в виду, что мне нужно реализовать ng-model самостоятельно? – Sunny

ответ

0

Вот способ заставить его работать, просто установите Бодрствующего на choice

$scope.$watch('choice', function(val) { 
    elm.val(val); 
}); 

http://jsfiddle.net/SHxBp/2/

+0

Спасибо за помощь, я заметил, что в выборе появится пустой параметр, и после того, как вы нажмете его, уйдет ли вообще идея удалить этот пустой параметр в первый раз? – Sunny

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

  • Нет связанных вопросов^_^