微风无法识别修改后的实体



我有一个轻而易举的实现,它采用一个位置对象并在UI上显示属性。我对一些属性进行了更改并尝试保存更改,但 breeze 无法将实体识别为已更改。以下是我的代码:

    [HttpGet]
    [CustomAuthorize(Claims = "permission:CanViewLocationAttributes")]
    public Location GetLocationById(int clientId, int locationId)
    {
        //returns a single Location object
    }

以下是检索实体和保存实体的客户端功能:

    function getLocationById(clientId, locationId) {
        var self = this;
        return EntityQuery.from('GetLocationById')
                            .withParameters({ clientId: clientId, locationId : locationId })
                            .using(self.manager)
                            .execute()
                            .then(querySucceeded, this._queryFailed);
        function querySucceeded(data) {
            if (data.results.length > 0) {
                return data.results[0];
            }
            logSuccess(localize.getLocalizedString('_RetrievedLocations_'), locations, true);
        }
    }
        function saveLocationSettings(clientId) {
        var self = this;
        var saveOptions = this.manager.saveOptions.using({ resourceName: "SaveLocationSettings",  allowConcurrentSaves: true });
        var entitiesToSave = self.manager.getChanges();
        return self.manager.saveChanges(entitiesToSave, saveOptions).then(saveSucceeded, saveFailed);
    }

我的问题是,即使我对 UI 中的字段进行更改并保存它们,这里实体ToSave 的值也是 0。

以下是如何将实体绑定到我的角度模型:

  function getLocationDetails() {
        clientcontext.location.getLocationById($route.current.params.clientId, $route.current.params.id)
  .then(function (data) {
      basicLocationSettings.id = data.locationId;
      basicLocationSettings.parent = data.fkParentLocationId;
      basicLocationSettings.locationType = data.locationType;
      basicLocationSettings.locationName = data.locationName;
      basicLocationSettings.locationDisplayName = data.locationDisplayName;
      basicLocationSettings.locationCode = data.locationCode;
      basicLocationSettings.isActive = data.activeStatus;
      basicLocationSettings.timeZone = data.fkTimeZoneId;
      basicLocationSettings.usesAppointments = data.usesAppointments;
      basicLocationSettings.availabilityWindowDays = data.availabilityWindowDays;
      basicLocationSettings.appointmentCutOffDays = data.appointmentCutOffDays;
      basicLocationSettings.dailySummaryEmailTime = data.dailySummaryEmailTime;
      basicLocationSettings.reminderBeforeApptEmailTime = data.reminderBeforeApptEmailTime;
      basicLocationSettings.saveLocationSettings = function () {
          clientcontext.location.saveLocationSettings($route.current.params.clientId);
      }
  });
    }

谁能解释我做错了什么?这是我第一次尝试微风,我有点被困在这里。

看起来您正在将微风位置实体的属性值复制到名为"basicLocationSettings"的 pojo 对象变量中。 对基本位置设置的任何更改都不会被 breeze 实体管理器跟踪或反映在源 breeze 实体中。 您需要将实际的 breeze 实体绑定到 UI,以便用户数据输入直接修改实体属性值。

我按如下方式修改了我的代码,现在保存正在工作:

 function getLocationById(clientId, locationId) {
        var self = this;
        var location = null;
        return EntityQuery.from('GetLocationById')
                            .withParameters({ clientId: clientId, locationId : locationId })
                            .using(self.manager)
                            .execute()
                            .then(querySucceeded, this._queryFailed);
        function querySucceeded(data) {
            if (data.results.length > 0) {
                location = data.results[0];
            }
            logSuccess(localize.getLocalizedString('_RetrievedLocations_'), locations, true);
            return location;
        }
    }

请注意,我返回了一个位置对象,在我的控制器中,我将位置对象绑定到我的 POJO。

        function getLocationDetails() {
        clientcontext.location.getLocationById($route.current.params.clientId, $route.current.params.id)
  .then(function (data) {
      basicLocationSettings.location = data;
      basicLocationSettings.saveLocationSettings = saveLocationSettings;
  });
    }

现在,当我调用 saveChanges() 时,我将位置对象传递给存储库:

      function saveLocationSettings() {
        clientcontext.location.saveLocationSettings(basicLocationSettings.location);
    }

相关内容

  • 没有找到相关文章

最新更新