Sencha: перебираем хранилище списка пользовательского подкласса BaseModel - PullRequest
1 голос
/ 05 мая 2011

Я только вчера начал играть с Ext GWT от Sencha, и я ударил стену.Я объединил методы из их загруженной JSON сетки и их редактируемой сетки.В качестве набора тестовых данных я использую список эпизодов Stargate Atlantis, следовательно, SGAEpisode, который определяется как:

public class SGAEpisode extends BaseModel {
  public SGAEpisode() {

  }

  public SGAEpisode(String season, String episode) {
    set("season",season);
    set("episode",episode);
  }

  public void setSeason(String season) {
    set("season",season);
  }

  public String getSeason(){
    return get("season");
  }

  public void setEpisode(String name) {
    set("episode",name);
  }

  public String getEpisode() {
    return get("episode");
  }

  public String toString() {
    return "Season: " + get("season") + " episode: " + get("episode");
  }
} 

onModuleLoad () начинается с ...

ModelType type = new ModelType();
type.setRoot("seasons");
type.addField("Season","season");
type.addField("Episode","episode");

String path = GWT.getHostPageBaseURL() + "senchaapp/sgaepisodes";

final RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,path);
final MVProxy<String> proxy = new SProxy<String>(builder);

JsonLoadResultReader<ListLoadResult<SGAEpisode>> reader = new JsonLoadResultReader<ListLoadResult<SGAEpisode>>(type);
final BaseListLoader<ListLoadResult<SGAEpisode>> loader = new BaseListLoader<ListLoadResult<SGAEpisode>>(proxy,reader);

final ListStore<SGAEpisode> episodes = new ListStore<SGAEpisode>(loader);

так что loader.load () прекрасно работает, заполняя сетку, я могу редактировать поля, но я не вижу, чтобы commitChanges () что-то делал, и я не могу перебрать «эпизоды» ListStore, чтобы собрать измененные или добавленные значения.Да, и SProxy - это просто подкласс DataProxy, позволяющий мне указать JSON сезона, который я загружаю в сетку.

Если я попытаюсь либо

for(SGAEpisode episode : episodes) {
  save(episode);
}

, либо

for(int i = 0; i < episodes.getCount(); i++) {
  save(episodes.getAt(i));
}

Я получаю исключение с сообщением "com.extjs.gxt.ui.client.data.BaseModel не может быть приведен к com.mvsc.sencha.shared.SGAEpisode" Есть идеи, что я делаю неправильно?Все до этого момента было определено / заполнено SGAEpisodes .....

Добавление Хорошо, поэтому, если я попытаюсь

List<Record> modified = episodes.getModifiedRecords();

for(Record r : modified) {
  ModelData md = r.getModel();
  save(md.get("season"),md.get("episode")); 
}

, я могу выполнить итерацию и получитьизмененные значения, но какой смысл иметь подкласс ModelData, если мне нужно использовать базовый класс, как этот.Что заставляет меня думать, что на самом деле мне не нужно ..... немного помогать?

Приложение 2 Вместо этого я попытался создать подкласс BaseModelData.

1 Ответ

0 голосов
/ 28 января 2013

Я знаю, что это старый пост, у меня была такая же проблема. Вот как я это исправил. попробуйте перебрать модели в listStore.

for(SGAEpisode episode : episodes.getModels()) {
    save(episode);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...