Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据数据库中的信息放置checked=true的项?_Javascript_Angularjs_Node.js_Sails.js_Lodash - Fatal编程技术网

Javascript 如何根据数据库中的信息放置checked=true的项?

Javascript 如何根据数据库中的信息放置checked=true的项?,javascript,angularjs,node.js,sails.js,lodash,Javascript,Angularjs,Node.js,Sails.js,Lodash,我有一个项目列表,可以选择是否选中它们。我正在做一个post请求以保存未检查的项目,该post请求工作得很好,但我在get请求中遇到了问题,前端从后端检索信息,但我有一个函数,该函数正在启用checked=true项目,而不考虑已保存的未检查项目 if (sports.length) { $scope.sports = _.map(sports, function(sport) { sport.checked = true; r

我有一个项目列表,可以选择是否选中它们。我正在做一个post请求以保存未检查的项目,该post请求工作得很好,但我在get请求中遇到了问题,前端从后端检索信息,但我有一个函数,该函数正在启用
checked=true
项目,而不考虑已保存的未检查项目

      if (sports.length) {
         $scope.sports = _.map(sports, function(sport) {
         sport.checked = true;
          return sport;
         });
      };
因此,如果用户刷新页面,由于上述功能,所有项目都返回到
checked=true
。那么,我该如何持久化选中或未选中的项目呢?为了保存数据,我必须在该函数中更改什么

这是我关于获取数据请求的代码

我使用的是
lodash
,以防万一

前端

controller.js

.factory('SportsFactory', function($http, $q, AuthFactory,
                                   LocalForageFactory, CONSTANT_VARS) {

 return {

      getSportChecked: function(customer) {
        var defer = $q.defer(),
            user,
            rejection = function(err) {
              console.log(err);
              defer.reject(err);
            };
        LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED)
          .then(function(sportChecked) {
            user = customer.customer;
            if (!_.isNull(sportChecked)) {
              defer.resolve(sportChecked);
            }else {
              $http.get(CONSTANT_VARS.BACKEND_URL + '/sports/getChecked/' + user)
              .success(function(sportChecked) {
                LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED, sportChecked);
                defer.resolve(sportChecked);
              })
              .error(rejection);
            }
          }, rejection);
        return defer.promise;
      }
 }
});
请阅读此代码中的注释

.controller('SportsController', function($scope, SportsFactory, AuthFactory) {

$scope.sports = [];

SportsFactory.getSportChecked(customer).then(function(sportChecked) {
            _.each(sports, function(sport) {
              var sportIds = _.pluck(sports, 'id'),
                  intersectedSports = _.intersection(sportIds, sportChecked),
                  checkedSportObjects = _.filter(sport, function(sportObj) {
                    return _.includes(intersectedSports, sportObj);
                  });
              _.each(checkedSportObjects, function(sport) {
                $scope.sports.push(sport);
              });
            });
          }

//this is the function putting checked = true with out taking care
//of what the back-end returns

 if (sports.length) {
   $scope.sports = _.map(sports, function(sport) {
     sport.checked = true;
     return sport;
    });
 }

 $scope.toggleSportSelection = function(sport) {
  var params = {};
  params.user = $scope.customer.customer;
  params.sport = sport.id;
  sport.checked = !sport.checked;
  SportsFactory.setSportChecked(params);
 };

});
module.exports = {
 getSportChecked: function(params) {
    var Promise = require('bluebird');
    return new Promise(function(fullfill, reject) {
      console.time('sportChecked_findOne');
      SportSelection.find({
        user: params.user
      }).exec(function(err, sportChecked) {
        console.timeEnd('sportChecked_findOne');
        if (err) {
          reject(new Error('Error finding sportChecked'));
          console.error(err);
        }else {
          if (sportChecked) {
            fullfill(sportChecked);
          }else {
            console.time('sportChecked_create');
            SportSelection.create({
              sport: [],
              user: params.user
            }).exec(function(err, created) {
              console.timeEnd('sportChecked_create');
              console.log(err);
              console.log(created);
              if (err) {
                reject(new Error('Error on sportChecked'));
              }else {
                fullfill(created);
              }
            });
          }
        }
      });
    });
  }
}
service.js

.factory('SportsFactory', function($http, $q, AuthFactory,
                                   LocalForageFactory, CONSTANT_VARS) {

 return {

      getSportChecked: function(customer) {
        var defer = $q.defer(),
            user,
            rejection = function(err) {
              console.log(err);
              defer.reject(err);
            };
        LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED)
          .then(function(sportChecked) {
            user = customer.customer;
            if (!_.isNull(sportChecked)) {
              defer.resolve(sportChecked);
            }else {
              $http.get(CONSTANT_VARS.BACKEND_URL + '/sports/getChecked/' + user)
              .success(function(sportChecked) {
                LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED, sportChecked);
                defer.resolve(sportChecked);
              })
              .error(rejection);
            }
          }, rejection);
        return defer.promise;
      }
 }
});
后端-node.js/sails.js

.factory('SportsFactory', function($http, $q, AuthFactory,
                                   LocalForageFactory, CONSTANT_VARS) {

 return {

      getSportChecked: function(customer) {
        var defer = $q.defer(),
            user,
            rejection = function(err) {
              console.log(err);
              defer.reject(err);
            };
        LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED)
          .then(function(sportChecked) {
            user = customer.customer;
            if (!_.isNull(sportChecked)) {
              defer.resolve(sportChecked);
            }else {
              $http.get(CONSTANT_VARS.BACKEND_URL + '/sports/getChecked/' + user)
              .success(function(sportChecked) {
                LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED, sportChecked);
                defer.resolve(sportChecked);
              })
              .error(rejection);
            }
          }, rejection);
        return defer.promise;
      }
 }
});
设置端口控制器

module.exports = {

  retrieveSetCheck: function(req, res) {
    if (req.params) {
 SportSelectionService.getSportChecked(req.params).then(function(sportChecked) {
        res.json(200, sportChecked);
      }, function(err) {
        res.json(400, err);
      });
    }else {
      res.json(400, {error: 'Error retrieving Sports'});
    }
  }
}
体育选择服务

.controller('SportsController', function($scope, SportsFactory, AuthFactory) {

$scope.sports = [];

SportsFactory.getSportChecked(customer).then(function(sportChecked) {
            _.each(sports, function(sport) {
              var sportIds = _.pluck(sports, 'id'),
                  intersectedSports = _.intersection(sportIds, sportChecked),
                  checkedSportObjects = _.filter(sport, function(sportObj) {
                    return _.includes(intersectedSports, sportObj);
                  });
              _.each(checkedSportObjects, function(sport) {
                $scope.sports.push(sport);
              });
            });
          }

//this is the function putting checked = true with out taking care
//of what the back-end returns

 if (sports.length) {
   $scope.sports = _.map(sports, function(sport) {
     sport.checked = true;
     return sport;
    });
 }

 $scope.toggleSportSelection = function(sport) {
  var params = {};
  params.user = $scope.customer.customer;
  params.sport = sport.id;
  sport.checked = !sport.checked;
  SportsFactory.setSportChecked(params);
 };

});
module.exports = {
 getSportChecked: function(params) {
    var Promise = require('bluebird');
    return new Promise(function(fullfill, reject) {
      console.time('sportChecked_findOne');
      SportSelection.find({
        user: params.user
      }).exec(function(err, sportChecked) {
        console.timeEnd('sportChecked_findOne');
        if (err) {
          reject(new Error('Error finding sportChecked'));
          console.error(err);
        }else {
          if (sportChecked) {
            fullfill(sportChecked);
          }else {
            console.time('sportChecked_create');
            SportSelection.create({
              sport: [],
              user: params.user
            }).exec(function(err, created) {
              console.timeEnd('sportChecked_create');
              console.log(err);
              console.log(created);
              if (err) {
                reject(new Error('Error on sportChecked'));
              }else {
                fullfill(created);
              }
            });
          }
        }
      });
    });
  }
}

我知道
sportChecked
表示某种型号,但您在什么时候查看该型号并确定是否已检查?它似乎是一个名为
getSportChecked
的函数,只应返回
checked
sports,因此
if(sportChecked&&sportChecked.checked==true)…
@AustinMullins我确定在我写的一篇帖子中,您想在
SportSelectionService
getSportChecked
方法中查看帖子请求的代码。现在,它会查找一个用户,如果找到,会显示
if(sportChecked)fullfill(sportChecked)
。但你可能不想退回每一项运动,只退回那些经过检查的运动,对吗?让我们。