Как связать дерево с моделью в qooxdoo?а какой формат то должен иметь? - PullRequest
0 голосов
/ 28 февраля 2012

Я искал в Google, но без помощи.

Я хотел бы знать, как связать дерево с моделью или магазином, я даже не знаю, какое из них больше подходит (http://manual.qooxdoo.org/1.6.x/pages/data_binding/data_binding.html).

У меня есть служба , которая извлекает данные из базы данных и сохраняет данные в своем хранилище .

this.__store = new qx.data.store.Json(url, delegate);
this.__store.bind("model", this, "testData");

после обновления службы отправитсобытие, и я слушаю его:

  service.addListener("changeTestData", function(e) {
    this.debug(qx.dev.Debug.debugProperties(e.getData()));
    var tree = main.tree;
  }, this);

Я не знаю, является ли это правильным способом. Я полагаю, нет, но я не знаю, как связать модель / сервис /сохранить в дереве, чтобы работать.

Мое дерево:

    var tree = this.tree = new qx.ui.tree.Tree().set({
      width : 200,
      height : 400
    });

спасибо

ОБНОВЛЕНИЕ:

Все еще не работает .. этониже показан только один элемент без метки, и я не могу открыть его, чтобы увидеть его дочерний элемент. error: "Uncaught qx.core.AssertionError: error" Мой формат данных:

[{_id:3423, title:"asdad", kids: []}] and so on...
-index(0): 
-- title: abc
-- _id: 4f4cea3e4b58dffc04000001
-- kids: 

-index(1): 
-- title: abc
-- _id: 4f4cea3e4b58dffc04000002
-- kids: ---index(0): 
---- title: abc
---- _id: 4f4cea3e4b58dffc04000001
---- kids: 

Это мой код:

  var url = "http://127.0.0.1:8000/";
  var delegate = { 
    configureRequest : function(request) { 
      request.set({ 
        "method"      : "POST", 
        "requestData" : { 
          "serviceToUseOnServer" : "articles"
        } 
      }); 
    }, 
  };

  var status = new qx.ui.basic.Label("Loading...");
  var store = new qx.data.store.Json(url, delegate);
  store.bind("state", status, "value");

  var tree = new qx.ui.tree.Tree().set({
    width : 200,
    height : 400
  });
  var controller = new qx.data.controller.Tree(null, tree, "kids", "title");
  store.bind("model", controller, "model");

  main.add(tree, {top: 50, left: 200});
  main.add(status, {top: 50, right: 200});

  store.addListener("loaded", function(e) {
    // now I can't even reach this point. the error spawns and this is not called..
    debugger;
    var root = tree.getRoot();
    // tree.getRoot().setOpen(true);
    // gives me an error because root is null
    this.debug(qx.dev.Debug.debugProperties(e.getData()));
  }, this);

1 Ответ

2 голосов
/ 28 февраля 2012

Перекрестная публикация в списке пользователей qooxdoo.

Я нашел очень хороший пример для вашего вопроса: http://demo.qooxdoo.org/current/demobrowser/#data~JsonToTree.html

Там вы можете увидеть, как связать хранилище JSON с TreeController.

В демонстрационном браузере вы найдете еще несколько примеров.

Редактировать: Пожалуйста, проверьте тот факт, что ваш файл JSON имеет корневой узел внутри. Файл JSON нашего примера содержит корневой узел. Это объясняет, почему в вашем фрагменте кода корневой узел имеет значение null.

...