wolf47
@wolf47
Айтишник, немного програмирую на JS

Как добавить новый элемент в массив и зменить один из них в массиве?

Доброго дня!

Мне нужно обновить один элемент в массиве и добавить новый элемент.
Это нужно чтобы установить новый автомобиль водителю.

Мое представление:
<div class="form-group" ng-class="{ 'has-error' : submitted && driverForm.car.$invalid }">
              <label mean-token="'edit-car'" class="col-md-2 control-label">Авто</label>
              <div class="col-md-10">
                <select name="car" id="car" ng-model="selectedCar" class="form-control">
                  <option ng-repeat="option in cars" value="{{option._id}}">
                    {{option.model +' - '+ option.number}}
                  </option>
                </select>
              </div>
            </div>


Контроллер на представление. Это мой не рабочий вариант
$scope.update = function(isValid) {
      if (isValid) {
        var driver = $scope.driver;
        if (!driver.updated) {
          driver.updated = [];
        }
        driver.updated.push(new Date().getTime());
        driver.user = MeanUser.user;
        driver.acl = MeanUser.acl;

        var newCar = currentCar($scope.selectedCar);
        var oldCar = _(driver.cars).filter({'current': true}).map(function (item) {
          item.current = false;
          return item;
        }).value()[0];

        driver.cars.push(newCar;      
        driver.$update(function() {
          console.log('driver.cars: ', driver.cars);
          $location.path('drivers/' + driver._id);
        });
      }
      else {
        $scope.submitted = true;
      }
    };

    function currentCar (car) {
      return {
        date: new Date(),
        car: car._id,
        current: true
      }
    }


Модель:
var DriversSchema = new Schema({
    name: {
        type: String,
        required: true,
        trim: true,
        unique: true,
        dropDups: true
    },
    id: {
        type: Number,
        required: true,
        unique: true,
        dropDups: true
    },
    cars: [{
        current: Boolean,
        car: {
            type: Schema.ObjectId,
            ref: 'Car'
        },
        date: Date
    }],
...


Серверный контроллер:
update: function(req, res) {
            var driver = _.extend(req.driver, req.body);
            console.log('Update driver ', driver);
            driver.cars = _(driver.cars).map(function (item) {
                console.log(item);
                item.car = mongoose.Types.ObjectId(item.car);
                return item;
            }).value();
            driver.save(function(err, response) {
                if (err) {
                    console.log('Error on update drivers car ' + err);
                    return res.status(500).json({
                        error: 'Cannot update the driver'
                    });
                }
                res.json(driver);
            });
        },


Я хочу содержать свойство документа driver, cars в таком виде
[{
        current: Boolean, // текущий авто
        car: {
            type: Schema.ObjectId,
            ref: 'Car'
        },
        date: Date
    }]


То есть хочу сохранить ссылку на документ cars
  • Вопрос задан
  • 323 просмотра
Пригласить эксперта
Ответы на вопрос 1
@aayarushin
Приглядись к lodash.js
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы