Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 28.08.2010, 21:48
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от B~Vladi
Ну он [Команда] хорошо подходит на это место. Контроллер будет командовать. Реализация не сложная. Конечно, я готов рассмотреть другие варианты.
там учавствуют три объекта. Виды, один контроллер... кто третий? И главное для чего?

Сообщение от B~Vladi
т.е. ты предлагаешь пробрасывать события V <-> C <-> M ?!
почему нет? Модель сообщает через контроллер, что изменилось, тем или иным образом. Себя никак не называет. Можно это уведомления на категории (или просто разные события сделать) разбить, на которые виды будут подписываться

Сообщение от B~Vladi
Ну да, вообще описание классов, внутреннего функционала. Без каких-то конкретных действий.
для элементарных компонентов (которые ближе к разметке, чем к доменной области; какой-нибудь стилизованный input type=file) вряд ли прокатит. Тоже на правах пришедшей в голову мысли

Последний раз редактировалось x-yuri, 28.08.2010 в 21:53.
Ответить с цитированием
  #52 (permalink)  
Старый 28.08.2010, 21:59
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от x-yuri
почему нет?
Да я как бэ не против
Сообщение от x-yuri
для элементарных компонентов (которые ближе к разметке, чем к доменной области; какой-нибудь стилизованный input type=file) вряд ли прокатит. Тоже на правах пришедшей в голову мысли
Ну я начинаю разработку именно с этого... Описываю компоненты, их взаимодействие, хранение и передачу данных... А потом уже методы, ну и все остальное. Не зависимо от задачи, если она достаточно большая и сложная.
Ответить с цитированием
  #53 (permalink)  
Старый 31.08.2010, 04:33
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от B~Vladi
Сначала я опишу каждую составляющую более абстрактно, без привязке к отображению или к чему либо ещё, на какой-нибудь тестовой страничке.
Сообщение от B~Vladi
Ну да, вообще описание классов, внутреннего функционала. Без каких-то конкретных действий.
Сообщение от B~Vladi
Ну я начинаю разработку именно с этого... Описываю компоненты, их взаимодействие, хранение и передачу данных... А потом уже методы, ну и все остальное. Не зависимо от задачи, если она достаточно большая и сложная.
ты можешь это на каком-то конкретном примере продемонстрировать?
Ответить с цитированием
  #54 (permalink)  
Старый 31.08.2010, 10:42
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Ну вот нашел кусок кода, который находится на той стадии, когда нужно реализовывать взаимодействие с DOM. Логика и обработка данных уже готова.
var Domino = (function(){
    var sides = ['top', 'right', 'bottom', 'left'];

    // Ajax
    function ajax(opt){
      var request = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
      request.open(typeof opt.method == 'string' ? opt.method.toLowerCase() : 'GET', opt.url, opt.async != void 0 ? !!opt.async : true);

      if(opt.options){
        request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        request.setRequestHeader('Content-length', opt.options.length);
        request.setRequestHeader('Connection', 'close');
        request.send(opt.options);
      } else {
        request.send(null);
      }

      setTimeout(function(){
        if(opt.callback && request.readyState == 4 && request.status == 200){
          opt.callback(new Function('return ' + request.responseText)(), opt.data);
        } else {
          setTimeout(arguments.callee, 15);
        }
      }, 0);
    }

    // Animation
    function slideImage(opt){
      var steps = Math.floor(opt.time * opt.fps / 1000);
      var timeOuts = [];

      for(var i = 1; i <= steps; i++){
        var time = Math.floor(1000 / opt.fps * i);

        timeOuts.push(setTimeout((function(time){
          var stop = false;
          return function(){
            var integer = opt.stop * (time * 100 / opt.time) / 100;
            if(opt.call && (stop = opt.call(integer) === false)){
              var l = timeOuts.length;
              while(l){
                clearTimeout(timeOuts[--l]);
              }
            }

            if(stop || opt.stop == integer){
              opt = steps = i = l = time = timeOuts = null;
            }
          }
        })(time), time));
      }
    }

    // Test
    slideImage({
      time: 1500,
      fps: 30,
      stop: 143
    });

    function Constructor(opt){
      this.options = {};
      for(var property in opt){
        opt.hasOwnProperty(property) && (this.options[property] = opt[property]);
      }

      this.data = {
        images: [],
        nodes: [],
        timeStamp: new Date
      };

      // Наполнение
      var node = document.getElementById(opt.id);

      var l = (node.clientWidth / this.options.width) * (node.clientHeight / this.options.height);
      var fragment = document.createDocumentFragment();

      while(l--){
        var item = document.createElement('div');

        // TODO: -2 убрать
        item.style.cssText = 'width:' + (this.options.width-2) + 'px;' +
          'height:' + (this.options.height-2) + 'px; border: #f00 1px solid; float:left;';
        this.data.nodes.push(item);
        fragment.appendChild(item);
      }
      node.appendChild(fragment);
    }

    Constructor.prototype = {
      start: function(){
        var data = this.data;

        (function(){
          if(!data.images.length){
            return;
          }

          var item = data.images.shift();
          if(data.loaded && item.timeStamp != data.timeStamp){
            return arguments.callee();
          }

          var activeNode = data.nodes[Math.floor(Math.random() * data.nodes.length)];

          data.images.push(item);

          data.timer = setTimeout(arguments.callee, 1000);
        })();
      },
      stop: function(){
        clearTimeout(this.data.timer);
      },
      update: (function(){
        function onLoadImage(){
          this.data.options.img = this;
          this.data.objData.images.unshift(this.data.options);
          !this.data.index && (this.data.objData.loaded = true);
          delete this.data, this.onload;
        }

        function onLoadData(result, data){
          data.timeStamp = new Date;

          var length = result.imgs.length;
          while(length){
            var item = new Image();
            item.data = {
              objData: data,
              options: result.imgs[--length],
              index: length
            };
            item.timeStamp = data.timeStamp;
            item.onload = onLoadImage;
            item.src = item.data.options.img;
          }

          delete data.loaded;
        }

        return function(url){
          ajax({
            url: typeof url == 'string' && url.length ? url : this.options.url,
            callback: onLoadData,
            data: this.data
          });
        };

      })()
    };

    return Constructor;
  })();

  var dm = new Domino({
    width: 50,
    height: 50,
    url: 'req.js',
    speed: 30,
    id: 'contaner'
  });

  dm.start();

В двух словах, это реализация слайда группы каринок.
Сами картинки не меняются, только обработка данных. Пишется как самостоятельное приложение, без привязки к фреймворкам.

Последний раз редактировалось B~Vladi, 31.08.2010 в 10:52.
Ответить с цитированием
  #55 (permalink)  
Старый 31.08.2010, 12:09
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Это то, что ты просил?
Ответить с цитированием
  #56 (permalink)  
Старый 05.09.2010, 18:01
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

приблизительно

Но ты говорил, про код, не привязанный к отображению. Где граница? Ты создаешь div'ы, назначаешь css-свойства

И что там с Командой? Как участники шаблона проецируются на реальные объекты?

Последний раз редактировалось x-yuri, 05.09.2010 в 18:03.
Ответить с цитированием
  #57 (permalink)  
Старый 05.09.2010, 21:17
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от x-yuri
Но ты говорил, про код, не привязанный к отображению.
Этот код писался в моем "старом" стиле. Вопрос был о стадии разработки приложения.
Сообщение от x-yuri
И что там с Командой? Как участники шаблона проецируются на реальные объекты?
Этот шаблон не подходит для моих задач. Сейчас архитектура построена на MVC+Observer, причем последний относиться только к модели (взаимодействие на другие модули путем изменения только своих данных - событие update). Доступ и обработка данных осуществляется через API между модулем и хранилищем (контроллер). Так как данные хранятся в html-коде (view), парсингом занимается отображение.
Как будет рабочий прототип, можно будет уже конкретные примеры моделей (модулей) привести и вообще схему всей архитектуры.
Ответить с цитированием
  #58 (permalink)  
Старый 19.10.2010, 15:40
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

B~Vladi,
Хотелось бы поднять старую тему и поинтересоваться, нельзя ли взглянуть одним глазком на прототип?
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #59 (permalink)  
Старый 19.10.2010, 16:29
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Кто-то ещё помнит...
Пока нет.
Архитектура утверждена в плане удобства/универсальности.
Сейчас занимаюсь оптимизацией работы с View (самое узкое место). Удалось реализовать полный парсинг DOM средней страницы (1000 элементов) за 20-30 мс, и это ещё не конец. Т.е. по определённому запросу, я уже могу быстро получать нужные мне данные из хранилища (DOM), но сохранять пока не могу.
Интерфейс работы с моделями готов. Ждет, пока свяжу с контроллером. Самое главное - удалось полностью избавиться от зависимостей между моделями. При этом никаких ограничений на работу с View не возникло.

В общем, дела идут, но сильно медленно, ибо работаю на дядьку
Уже присмотрел один работающий проект для бета-тестирования прототипа. Хочу посмотреть, насколько просто будет интегрирование фреймворка на уже рабочее приложение.

Я вас обязательно попрошу принять участие в бета-тестировании, больше мне надеяцо ненакого

Последний раз редактировалось B~Vladi, 19.10.2010 в 16:32.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Google Chart API mycoding Оффтопик 0 14.07.2010 11:22