2015-06-03 71 views
1

我的問題是,我試圖從控制器內部訪問這些複選框,所以我可以從那裏設置它們爲true。數據綁定到ng模型裏面的複選框

出於某種原因,我無法弄清楚用於這些複選框的正確的ng模型,以便我有能力這樣做,同時保持每個模型都有唯一的名稱。

 <accordion-group ng-repeat="group in groups"> 
     <accordion-heading>{{group.title}}</accordion-heading> 
     <div ng-repeat="collection in group.collections"> 
      <div class="checkbox collection-legend" style="background-color: {{collection.color}}"> 
      <label><input type="checkbox" ng-click="toggleCollection(collection.key)" ng-model="checkboxes[collection.key]"> {{collection.name}}: <em>{{collection.description}}</em></label> 
      <div class="customFields"> 
       <label ng-repeat="(key, val) in collection.queries" ng-if="key != 'default' && key != 'dateRangeKey'"> 
       <input class="form-text" ng-model="customProperties[collection.name + '-' + key]" type="text"><em>{{key}}</em></label> 
      </div> 
      </div> 
     </div> 
     </accordion-group> 

對於某些方面,我想建立一個「恢復會話」的方法,在這裏用戶可以把備份,而無需再次填寫出來提交的舊形式,所以我有複選框列表這需要「重新檢查」,我只是不知道如何命名我的模型,所以我可以做到這一點。

ng-model =「checkboxes [collection.key]」好像它應該在這裏工作。有什麼建議?

然後$ scope.checkboxes [key] = true在控制器中。 (關鍵匹配collection.key;我已經證實了這一點)。獲取「無法設置(鍵)未定義」的錯誤。

這裏是JS:

$scope.session.collections.forEach(function(c){ 
     $scope.toggleCollection(c); 
     console.log(c + ' '+ typeof c); 
     $scope.checkboxes = { 
     c: true 
     }; 
    }); 

解決方案:不要初始化$ scope.checkboxes爲空對象。現在工作。

回答

0

你肯定粘貼的代碼工作,我在這裏證實此事: https://jsfiddle.net/ho8art1t/

複選框都應該是類似的規定:

$scope.checkboxes = { 
    a: true, 
    b: false, 
    c: true 
}; 

您應該粘貼與它或而來的JS只要檢查一下你的物體的放置方式與該小提琴類似。

+0

加入我的JS。我的語法一定有什麼問題,因爲我收藏的東西與你在小提琴中的東西幾乎完全一樣,並且它很有用。 – KalterTod

+0

你有forEach的任務,你確定你打算這麼做嗎?它會覆蓋每次複選框覆蓋,只留下一個項目c永遠。否則,我們可能還需要JS設置$ scope.collections – tom

+0

是的,我確實這麼做了,但我注意到了一些...當我分配「c」時...它只是創建一個對象{c :true},而不是使用變量c。有沒有辦法強制它是從forEach傳遞的字符串,而不是一個全新的對象? – KalterTod