2

我正在与 localForage 合作,在过去的 2 个小时里我一直在努力解决一件好事和一件非常糟糕的事情,我认为这更容易,但这就是我在这里的原因。

我有一个名为的数组sports,其中包含选中或取消选中它们的选项,一旦你取消选中或checked = false- 无论你想怎么称呼它 - 这些项目都保存在数据库中,但是当用户在会话中时它们应该保存在 localForage第一的。

好的部分: 如果您checked = false在阵列上的任何项目并注销,然后他们登录,您设置未选中的项目仍然存在,该部分工作得很好。

不好的部分: 如果您checked = false在数组上的任何项目并刷新页面,该项目checked = false返回到checked = true.

所以也就意味着刷新页面后,数据并没有持久化,只有注销再重新登录。

我正在使用forceTrip您将在下面的代码中看到的名称。

一切都与服务有关,看

angular.module('myApp')
  .factory('SportsFactory', function($http, $q, AuthFactory,
           LocalForageFactory, LeaguesFactory, CONSTANT_VARS) {
    return {
      getSports: function(customer, forceTrip) {
        forceTrip = forceTrip || false;
        var defer = $q.defer(),
        _this = this;

        if (forceTrip) {
         LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS)
        }

        LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS)

              $http.get(CONSTANT_VARS.BACKEND_URL + '/lines/sports/' + customer.agent)
                .success(function(sports) {
                  sports = _.sortBy(sports, function(sport) {
                    return sport.priority;
                  });

          //HERE I CALL GETSPORTCHECKED();
                  _this.getSportChecked(customer).then(function(sportChecked) {
                    var sportIds = _.pluck(sports, 'id'),
                        intersectedSports = _.intersection(sportIds, sportChecked.sport);
                    if (sports.length) {
                      sports = _.map(sports, function(sport) {
                        sport.checked = !_.includes(intersectedSports, sport.id);
                        return sport;
                      });
                    }
                  });
                  LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS, sports);
                  defer.resolve(sports);
                })
                .error(function(err) {
                  defer.reject(err);
                });
            }
          });
        return defer.promise;
      },

      setSportChecked: function(params) {
        var defer = $q.defer();
        $http.post(CONSTANT_VARS.BACKEND_URL + '/sports/checked', params)
        .success(function(sportChecked) {
            LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED, params);
            defer.resolve(sportChecked);
          })
          .error(function(err) {
            console.log(err);
            defer.reject(err);
          });
        return defer.promise;
      },

      getSportChecked: function(customer, forceTrip) {
        forceTrip = forceTrip || false;
        var defer = $q.defer(),
            user,
            rejection = function(err) {
              defer.reject(err);
            };

        if (forceTrip) {
          LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED);
        }
        LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED)
          .then(function(sportChecked) {
            user = customer.customer;
              $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;
      }

  };    
});

该函数在您获得任何项目setSportChecked后执行发布请求,并发出 get 请求以获取项目,并且您可以看到我正在调用,那么您认为我可以在这里做什么?checked = falsegetSportCheckedchecked = falsegetSports_this.getSportChecked(customer)

4

0 回答 0