javascript - Pre-loading checkboxes with ng-model -
i'm trying build form series of checkboxes represent polymorphic association between 2 models in database. have jobdescription
, experiencelevel
. form update jobdescription
, has checkbox each experiencelevel
. when form opens in modal, want have current experience levels checked associated job.
i've been struggling figure out how implement checkboxes using ng-repeat
, ng-model
. current code renders checkboxes, correct ones not pre-selected.
here editjob
method in controller:
$scope.editjob = function(r) { var experiencelevels = {}; r.experience_levels.map(function(r, i){ experiencelevels[i] = r.name; }); $scope.experiencelevels = experiencelevels; $scope.id = r.id; $scope.title = r.title; $scope.jobfunction = r.role; $scope.description = r.description; $scope.postinglink = r.posting_link; $scope.company = r.company_name; var modalinstance = $modal.open({ templateurl: '/assets/admin/editjob.html', controller: modalinstancectrl, scope: $scope, resolve: { jobform: function () { return $scope.jobform; } } }); };
here part of form checkboxes:
<div class="form-group"> <label>experience level</label> <div ng-repeat="experiencelevel in expitems"> <input type="checkbox" name="experiencelevel.display" ng-model="job.experiencelevels['experiencelevels']" ng-true-value="experiencelevel"> {{experiencelevel.display}} </div> </div>
i'm still not sure how pre-select checkboxes though. don't appear bound model.
i figured out solution problem. don't know if it's practice (would love feedback) seems work way want.
in controller pre-assign experience levels so:
$scope.editjob = function(r) { var experiencelevels = {}; r.experience_levels.map(function(r){ experiencelevels[r.name] = "true"; });
and on form decided bind experiencelevel.display
rather experiencelevel.key
, so:
<label>experience level</label> <div ng-repeat="experiencelevel in expitems"> <input type="checkbox" name="experiencelevel.display" ng-model="job.experiencelevels[experiencelevel.display]" ng-true-value="true" ng-false-value="false"> {{experiencelevel.display}} </div>
this gives me params hash looks like:
{ "id"=>"23", "title"=>"ruby ninja", "jobfunction"=>"customer support", "description"=>"awesomesauce!", "postinglink"=>"http://www.google.com/", "experiencelevels"=>{ "entry level"=>"false", "manager"=>"true" }, "company"=>"ice 2 go", "action"=>"update", "controller"=>"admin/job_descriptions", "job_description"=>{ "id"=>23, "title"=>"ruby ninja", "description"=>"awesomesauce!" } }
i can experiencelevel
name in rails controller.
Comments
Post a Comment