8000 GitHub - kaineer/ha-app-docs: Documentation
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

kaineer/ha-app-docs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Структура приложения

(Файлы: ha-app/app.js, ha-app/app/event-dispatcher.js)

Чтобы не передавать в конструкторы каждого отображения (view) и каждой модели ссылки на уже существующие объекты, введён-таки снова god-объект "приложение" (App), который хранит в себе ссылки на объекты, доступ к которым необходим из других объектов.

Пример:

// ha-app/models/code.js
var app = require('../app')();

var Code = function() {
  var code = { ... };

  // --- skip ---

  app.register('model.code', code);

  return code;
}

// ha-app/wrappers/javascript-runner.js
var app = require('../app')();

var JavascriptRunner = function() {
  var runner = {
    // --- skip ---

    evaluate: function() {
      // Получаем ссылку на модель
      var code = app.get('model.code');
      // Получаем javascript-код
      var jsCode = code.js;
      // --- skip ---
    }
  };

  // --- skip ---

  return runner;
};

Кроме того, объект App обеспечивает передачу сообщений от любого отображения или модели к любому объекту, подписавшемуся на это сообщение.

Пример:

// Получаем ссылку на объект "Приложение"
var app = require('../app')();

var ShowAnswersView = function() {
  var view = {
    initialize: function() {
      // Если у задачи вызван метод addAnswers, отображаем кнопку
      app.on('task.has.answers', this.onTaskHasAnswers, this);

      // При нажатии кнопки "Показать ответы"
      document.querySelector('.js--show-answers').addEventListener('click',
        function() {
          // Отправляем сообщение объекту "Ответы"
          app.emit('answers.show');
        }
      );
    },

    // --- skip ---
  };

  view.initialize();

  return view;
}

Остальные объекты: модели, отображения и обёртки будут рассмотрены ниже.

Модели (model) - объекты, хранящие в себе данные. По изменению данных могут отправлять события. Могут содержать логику, в частности, для заданий определяют - выполнено ли задание или нет.

  • Task - базовая модель для заданий

  • JavascriptTask - javascript-задание

  • JavascriptChallengeTask - javascript-испытание

  • Goal - цель в задании

  • JavascriptGoal - цель в javascript-задании

  • JavascriptChallengeGoal - цель в javascript-испытании

  • Code - модель, хранящая текущее состояние кода

  • AstAsserts - проверки совпадения кода с заданными шаблонами

  • ConsoleAsserts - проверка содержимого консоли

Отображения (view) - объекты, плотно связанные с DOM, реагируют на события, что-нибудь меняют в DOM и отправляют события, реагируя на DOM-события.

  • TaskView - отображение задания. На самом деле, могло бы быть обёрткой, т.к. по большей части создаёт другие отображения, обёртки и модели
  • GoalsView - показывает, насколько выполнены задания
  • JavascriptConsoleView - отображает сообщения от консоли
  • JavascriptControlsView - кнопки управления заданием (проверить на сервере, сохранить код и т.п.)
  • JavascriptRunView - кнопка "выполнить код", чекбокс "автовыполнение"
  • NextTaskView - кнопка "следующее задание"
  • ShowAnswersView - кнопка "показать ответ"
  • TaskCompletedView - сообщение "задание выполнено"

Обёртки (wrapper) - объекты, содержащие в себе всю остальную логику, не попавшую в модели или отображения.

  • Answers - получает доступ к редакторам и выводит в них автоматическое выполнение задания
  • Console - объект, принимающий методы вместо стандартного window.console
  • ConsoleSlowdown - прокладка между Console и JavascriptConsoleView.
  • Editor - базовый редактор, обёртка над Ace.js
  • CssEditor - базовый редактор с выбранным css режимом (пока не реализован)
  • HtmlEditor - базовый редактор с выбранным html режимом (пока не реализован)
  • JsEditor - базовый редактор с выбранным js режимом
  • Editors - контейнер для нескольких редакторов задачи
  • JavascriptRunner - обёртка, выполняющая javascript-код
  • Storage - обёртка над localStorage
  • Timer - обёртка над setTimeout
  • Timers - стандартные таймеры, таймер на автосохранение и на выполнение кода/обновление iframe-а
  • XHR - обёртка для выполнения запросов к серверу

About

Documentation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0