Comments (14)
Битые ссылки исправлю, спасибо.
По первому вопросу. Если ваше решение работает - отлично, пусть работает.
Но мне оно кажется неправильным идеологически. В идеале Класс Инпут должен думать только о себе. Влиять как-то на другие блоки он не должен. Поэтому я бы продолжил ваше первое решение:
Пусть по маузоверу вызывается не сразу 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.
Про второй вопрос. Интересный пример вы нашли. Я привык в конструктор передавать параметры в виде объекта
new View({
model: new SomeThing()
});
И тогда принимать параметры чуть иначе:
var View = inherit(YBlock, {
__constructor: function (params) {
this.__base();
this._bindTo(params.model, 'change-attr', this._onAttrChange);
}
});
Так оно лучше расширяется, можно в любой момент добавить новые параметры, не ломая код.
from docs.
А в данном случае сам блок это будет params без .model?
from docs.
Саша, я не понял ваш вопрос. Чуть разверните его, пожалуйста :)
from docs.
Ну т.е. мы принимаем 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.
Мы тут с вами намешали примеры из JSDoc
и примеры из yblock.md
, я запутался, если честно :)
Опишите мне, пожалуйста, задачу - для чего вам нужно в конструктор какого-то блока передавать другой блок. Может так я "распутаюсь" :)
from docs.
Мне нужно просто для метода _bindTo слушать событие на текущем блоке, а не его элементах.
Для этого в метод _bindTo необходимо первым аргументом передать сам блок.
this._bindTo(СамБлок, 'mouseover', this._onControlHovered);
Правильно ли я понимаю, что, если мы записываем вот так:
__constructor: function (хоть-поленом-назови)
, то хоть-поленом-назови это и есть представление Самого Блока...
А обращения вида хоть-поленом-назови**.какое-то_поле** это уже данные, к которым мы можем обращаться, но не блок целиком? :)
from docs.
Кажется, вам должно помочь this
:)
this._bindTo(this, 'mouseover', this._onControlHovered);
Работает?
from docs.
Вот он как раз и не работал =( Пойду ещё раз попробую, но вываливал ошибку, с которой я так и намучился =).
from docs.
Ошибку сейчас не отлавливаю в консоле, но не работает =)
from docs.
я сам попробую и вам сообщу ;)
from docs.
Так должно работать.
this._bindTo(this.getDomNode(), 'mouseover', this._onControlHovered);
from docs.
Саша, мы со всем разобрались, будем закрывать или остались вопросы по таске?
from docs.
Отлично! =) Всё работает =) Просто оказывается...
from docs.
Related Issues (20)
- Как добавить новый блок на уже созданную и работающую страницу? HOT 4
- Как жить без миксин? HOT 9
- Обновить FAQ HOT 3
- Есть ли (будет?) возможность быстрой компиляции проекта в статику? HOT 4
- Есть ли возможность создать блок со stylus библиотекой mixin и подключать его к другим блокам через deps? HOT 1
- Можно ли указать, какие шаблоны блоков нужно тянуть на front-end а какие оставить? HOT 4
- А практикум мы обязательно допишем ;) HOT 3
- Не получается создать тестовый проект HOT 1
- Нашёл небольшую нестыковку HOT 3
- Пример в "Учебнике для новичков" HOT 2
- Название input__control HOT 2
- Может неочевидный переход? HOT 6
- Неточности в примерах yblock.md HOT 9
- Описать, как Form.render рендерит блок на странице HOT 3
- Slack? HOT 15
- Рассказать про соответствие зависимостей в modules.define
- Уточнить про шаблоны в "Три способа генерации блока"
- Перевести концептуальную документацию на английский HOT 4
- Что если input помимо размера может иметь еще и разный цвет ? HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from docs.