Giter Club home page Giter Club logo

Comments (14)

makishvili avatar makishvili commented on July 18, 2024

Битые ссылки исправлю, спасибо.

По первому вопросу. Если ваше решение работает - отлично, пусть работает.

Но мне оно кажется неправильным идеологически. В идеале Класс Инпут должен думать только о себе. Влиять как-то на другие блоки он не должен. Поэтому я бы продолжил ваше первое решение:

Пусть по маузоверу вызывается не сразу hover, а специальный обработчик.

__constructor: function () {
    //...
    this._bindTo(this._control, 'mouseover', this._onControlHovered);
    //...
},

_onControlHovered: function () {
    this.hover()
    this.emit('hover-success');
},

hover: function () {
    this._setState('hover');
},

А в том Классе, из которого Input был создан (в моих примерах это класс Form) я бы все инпуты сохранил в некий массив и работал бы с ним так
Form

__constructor: function () {
    //...
    this._inputs = {
        new Input({btjson-параметры для первого инпута});
        new Input({btjson-параметры для второго инпута});
        new Input({btjson-параметры для третьго инпута});
    };

    this._inputs.forEach(function (input){
        input.on('hover-success', this._hoverAll, this);
    }.bind(this));
   //...
},

/**
 * Подсвечивает все инпуты
 */
_hoverAll: function () {
    this._inputs.forEach(function (input){
        input.hover();
    }.bind(this));
}

И этот код можно улучшить, но идея именно такая - все операции над инпутами должен производить из другого объекта, из некоего Контроллера.

from docs.

makishvili avatar makishvili commented on July 18, 2024

Про второй вопрос. Интересный пример вы нашли. Я привык в конструктор передавать параметры в виде объекта

new View({
    model: new SomeThing()
});

И тогда принимать параметры чуть иначе:

var View = inherit(YBlock, {
         __constructor: function (params) {
              this.__base();

              this._bindTo(params.model, 'change-attr', this._onAttrChange);
         }
 });

Так оно лучше расширяется, можно в любой момент добавить новые параметры, не ломая код.

from docs.

dracowf avatar dracowf commented on July 18, 2024

А в данном случае сам блок это будет params без .model?

from docs.

makishvili avatar makishvili commented on July 18, 2024

Саша, я не понял ваш вопрос. Чуть разверните его, пожалуйста :)

from docs.

dracowf avatar dracowf commented on July 18, 2024

Ну т.е. мы принимаем params в конструктор.
При создании объекта класса View мы говорим, что один из параметров будет model: new Something.

Возвращаясь к hover'у:

var View = inherit(YBlock, {
         __constructor: function (params) {
              this.__base();

              this._bindTo(params.model, 'mouseover', this._onControlHovered);
         }
 });

В данном случае он будет работать только по наведению на model (вот такой у нас model :))

var View = inherit(YBlock, {
         __constructor: function (params) {
              this.__base();

              this._bindTo(params, 'mouseover', this._onControlHovered);
         }
 });

А здесь по наведению на блок, т.к. params это и есть весь блок, я правильно понимаю? Или всё же блок это params.model или я вообще всё попутал?

from docs.

makishvili avatar makishvili commented on July 18, 2024

Мы тут с вами намешали примеры из JSDoc и примеры из yblock.md, я запутался, если честно :)

Опишите мне, пожалуйста, задачу - для чего вам нужно в конструктор какого-то блока передавать другой блок. Может так я "распутаюсь" :)

from docs.

dracowf avatar dracowf commented on July 18, 2024

Мне нужно просто для метода _bindTo слушать событие на текущем блоке, а не его элементах.
Для этого в метод _bindTo необходимо первым аргументом передать сам блок.

this._bindTo(СамБлок, 'mouseover', this._onControlHovered);

Правильно ли я понимаю, что, если мы записываем вот так:

__constructor: function (хоть-поленом-назови)

, то хоть-поленом-назови это и есть представление Самого Блока...

А обращения вида хоть-поленом-назови**.какое-то_поле** это уже данные, к которым мы можем обращаться, но не блок целиком? :)

from docs.

makishvili avatar makishvili commented on July 18, 2024

Кажется, вам должно помочь this :)

this._bindTo(this, 'mouseover', this._onControlHovered);

Работает?

from docs.

dracowf avatar dracowf commented on July 18, 2024

Вот он как раз и не работал =( Пойду ещё раз попробую, но вываливал ошибку, с которой я так и намучился =).

from docs.

dracowf avatar dracowf commented on July 18, 2024

Ошибку сейчас не отлавливаю в консоле, но не работает =)

from docs.

makishvili avatar makishvili commented on July 18, 2024

я сам попробую и вам сообщу ;)

from docs.

makishvili avatar makishvili commented on July 18, 2024

Так должно работать.

this._bindTo(this.getDomNode(), 'mouseover', this._onControlHovered);

from docs.

makishvili avatar makishvili commented on July 18, 2024

Саша, мы со всем разобрались, будем закрывать или остались вопросы по таске?

from docs.

dracowf avatar dracowf commented on July 18, 2024

Отлично! =) Всё работает =) Просто оказывается...

from docs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.