Behavior Ready Event
От: Antik  
Дата: 12.09.10 23:22
Оценка:
Есть ли способ отловить момент, когда все обозначенные Behavior приатачились к документу в sciter?

Задача стоит так: нужно загрузить через view.load() документ, дождаться момента когда все Behavior будут готовы для манипуляций и выполнить манипуляцию используя API одного из Behavior. Манипуляцию выполняет код, а не юзер.

Проблема в последнем шаге. Не знаю как отловить момент готовности всех Behavior.
Re: Behavior Ready Event
От: c-smile Канада http://terrainformatica.com
Дата: 19.09.10 20:43
Оценка:
Здравствуйте, Antik, Вы писали:

A>Проблема в последнем шаге. Не знаю как отловить момент готовности всех Behavior.


function self.ready()
{
  ...
}
Re[2]: Behavior Ready Event
От: Antik  
Дата: 27.09.10 22:27
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, Antik, Вы писали:


A>>Проблема в последнем шаге. Не знаю как отловить момент готовности всех Behavior.


CS>
CS>function self.ready()
CS>{
CS>  ...
CS>}
CS>


А если подгрузка behavior вызвана Element.load(url)? Элемент в данном случае не фрейм, а простой элемент. То есть, когда html код пришёл, бехавиоры начинают атачиться, а вот понять когда они закончили атачиться непонятно как.

Event.DOCUMENT_COMPLETE в данном случае не подходит, так как такой же евент возникает, когда подгружается по url картинка на hover state элемента при наведении мышкой, в случаях когда background-image на обычное состояние элемента и на hover state разная.
Re[3]: Behavior Ready Event
От: c-smile Канада http://terrainformatica.com
Дата: 28.09.10 00:26
Оценка:
Здравствуйте, Antik, Вы писали:

Строго говоря момент назначения behaviors не определен по определению.
Вернее так: behaviors назначаются/определяются в момент style resolution. А style resolution осуществляется когда мне нужно например сделать measure, т.е. расчитать layout или скажем определить visibility элемента.

Таким образом если тебе нужно обращаться к методам описанным в behavior элемента который загружается асинхронно или динамически то ты можешь сделать скажем следующее:

var el = $(someselector);
el.style#display; // retrieving "display" CSS property - forces style to be resolved.
el.someMethod();  // calling some method of the behavior ...


В принципе ты также можешь себе нарисовать скажем такую вот чудную property:

`property Element.x(v)
{
this.style#display;
return this;
}`

и использовать её так:

var el = $(someselector);
el.x.someMethod();  // calling some method of the behavior ...


Т.е. этот x работает proxy позволяющий "надежно" обращаться к методам behavior.

Можно также нарисовать функцию которая рекурсивно обойдет sub-tree и зарезолвит стили... Но это так... не сильно кузяво.
Re[4]: Behavior Ready Event
От: Antik  
Дата: 29.09.10 21:55
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Можно также нарисовать функцию которая рекурсивно обойдет sub-tree и зарезолвит стили... Но это так... не сильно кузяво.


Спасибо.

function Element.loadStyle() {
    this.style#display;
    for (var n = 0; n < this.length; ++n){
       this[n].loadStyle()
    }
}


Хоть и не кузяво, но в некоторых ситуациях лучшее решение. Зачем резолвить стили каждого элемента отдельно, если в sub-tree почти все элементы с behavior.
Re[5]: Behavior Ready Event
От: c-smile Канада http://terrainformatica.com
Дата: 29.09.10 23:02
Оценка:
Здравствуйте, Antik, Вы писали:

Тогда уже так:

function Element.loadStyle() 
{
    this.style#display;
    for (var el in this) el.loadStyle();
}
Re[6]: Behavior Ready Event
От: Antik  
Дата: 30.09.10 09:56
Оценка:
Здравствуйте, c-smile, Вы писали:
CS>
CS>function Element.loadStyle() 
CS>{
CS>    this.style#display;
CS>    for (var el in this) el.loadStyle();
CS>}
CS>


Пробывал так, как вы указываете. Спотыкается вот на этом:

<div id="new_btn" class="start_btn">&nbsp;</div>


Dump: <div#new_btn.start_btn>
Dump: <text>
Dump: а
Error: String (String("а")) has no method — loadStyle

А указанный мною код выше проходит по дереву нормально:

Dump: <div#new_btn.start_btn>
Dump: <text>
Dump: <div.title>
Dump: <text>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.