2015-10-19 3 views
0

У меня есть приложение, которое отображает таблицу данных с помощью кнопки публикации. Вы можете выбрать строки, а затем щелкнуть, чтобы опубликовать их. Выбранные данные упаковываются в необходимый формат json и отправляются через ajax для быстрой проверки, что ни один из данных не имеет никаких зависимостей. Если есть зависимости, он возвращает сообщение об ошибке и список этих зависимостей. Затем вы должны выбрать зависимости плюс родительский элемент и попытаться опубликовать его снова. Проблема заключается в том, что после обработки данных один раз в правильный формат json для отправки для первого вызова данные тогда кажутся непригодными и отсутствующими в модели вообще ... Я могу сделать вызов один раз, но не снова. Любая помощь высоко ценится! Вот мой контроллер:Restore Ember Data

export default Ember.ArrayController.extend({ 
actions: { 

    publishSubmit: function(){ 

     var checkedItems = this.get('model').filterBy('isChecked', true); 

     if(checkedItems.length > 0){ 

      this.send('dependencyCheck', checkedItems); 
     } 
     else{ 
      this.announce.error('No items selected for publish.'); 
     } 
    }, 

    dependencyCheck: function(items){ 
     var _this = this, data = []; 

     items.forEach(function(item){ 
      delete item._data.isChecked; 
      delete item._data.sortByDate; 
      item._data.publisherId = item._data.id; 
      delete item._data.id; 
      item._data.updatedDate = null; 
      data.push(item._data); 
     }); 

     //data formating(required) 
     data = _this.capitalizeAll(data); 
     data = JSON.stringify(data); 

     console.log(data); 

     Ember.$.ajax({ 
      type: 'POST', 
      dataType: 'json', 
      contentType: 'application/json', 
      beforeSend : function(xhr) { 
       xhr.setRequestHeader("Token", sessionStorage.getItem('authToken')); 
      }, 
      url: config.host + '/AssessmentPublishService/DependentPublishableItems', 
      data: data 
     }).then(function(dependencies){ 

      var processDependencies = _this.processResponseData(dependencies); 

      if(dependencies.Status === "Success"){ 

       console.log("ProccessD"); 
       console.log(processDependencies); 

       return JSON.stringify(processDependencies); 
      } 
      else{ 
       return this.announce.error('Failed to process.'); 
      } 
     }); 
    } 
} 
} 

ответ

1

Вы меняете модель при первом звонке на dependencyCheck. Используя delete, вы помещаете модель в плохое состояние. Вы не должны использовать _data (это частный, а намекают подчеркиванием)

items.forEach(function(item){ 
     delete item._data.isChecked; 
     delete item._data.sortByDate; 
     item._data.publisherId = item._data.id; 
     delete item._data.id; 
     item._data.updatedDate = null; 
     data.push(item._data); 
    }); 

Вы можете принимать любые значения, которые нужно без изменения модели:

items.forEach(function(item){ 
     data.push({ 
      publisherId: item.get('id'), 
      updatedDate: null 
      // etc 
     }); 
    }); 

еще лучше, позвоните serialize по модели и configure the serializer, чтобы включить нужные свойства.

var data = items.map(model => model.serialize()); 
    data = this.capitalizeAll(data); 
    data = JSON.stringify(data); 
+0

Вы абсолютно прибивали его. Я не понимаю, что я делаю, манипулируя личными данными. после изменения я постоянно изменял данные. поэтому я сделал так, как вы предполагали, и поместил его по частям в новую структуру. я не совсем понимаю подход к карте/сериализации. это может быть выше моего уровня оплаты. большое спасибо за вашу помощь! – campatsky