Цитата:
Цитата:
Цитата:
|
отлично, а теперь попробуй с помощью htmlpurifer сделать невалидный хмл
мне как-то пох с какой скоростью развивается сеть. в ней и так полно дерьма. куда уж больше? |
Цитата:
Цитата:
|
при том, что на выходе он генерирует ххтмл фрагмент
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Ну вот :( Ещё кое-что надумал, пока пытался заснуть вчера... Асинхронность. Например (из прошлого html-кода):
this.parent.item.Style({
display: 'none'
}, function(dataObject, property){
// Представление изменилось
});
или:
this.parent.item.Event({
click: false
}, function(dataObject, property){
// Обработчик установлен
});
Так как всё происходит после выполнения кода, в недрах контроллера (платформы), сразу обработать результат не получится. Например, часто бывает нужно узнать размеры элемента сразу после изменения данных. Архитектура (которая у меня в голове и в черновиках) это позволяет сделать. Как вам такой код?! |
на тот вопрос я не отвечал, так как не вижу смысла
любые инструменты, которые работают с документом не как со строкой, а как с деревом. события надо не только вешать, но и убирать, поэтому лучше что-то типа такого: var clickSpy= Spy( elem, 'click', function(){} ).listen() // создали и запустили прослушку ... clickSpy.forget() // забили на прослушку ... clickSpy.scream() // кричим другим агентам |
Цитата:
delete this.parent.item.Event().click; Цитата:
|
Цитата:
var AsyncChain = new Class({
Implements: [Events, Options],
_chain: [],
_state: {},
initialize: function( options ){
this.setOptions( options );
},
add: function( f ){
this._chain.push( f );
return this;
},
run: function(){
run.of(this)(0);
return this;
function run( i ){
var f = this._chain[i];
if( ! f )
return;
f.of(this)( run.of(this).pass(i+1) );
}
},
clear: function(){
this._chain = [];
return this;
},
set: function( options ){
$extend( this._state, options );
return this;
}
});
пример использования:
var chain = new AsyncChain();
chain.setOptions({
'onFailure': onFailure.of(this).pass(chain),
'onCancel': onCancel.of(this).pass(chain)
})
.set( options )
.add( this._disableLink )
.add( this._setPhotoUrl )
.add( this._setPhotoDownloadUrl )
.add( this._showThrobber )
.add( photosession.getThumbnailPath )
.add( photosession.setPhotoUploadUrl )
.add( photosession.loadPhoto )
.add( photosession.loadCropResize )
.add( this._hideThrobber )
.add( this._showDialog )
.add( photosession.cropResize )
.add( photosession.setThumbnailFormField )
.add( this._loadThumbnail )
.add( this._showThumbnail )
.add( this._closeDialog )
.add( this._enableLink )
.run();
|
Не не не, Девид Блейн.
Вот, например, есть объект, описывающий тег:
var data = {
value: 'text',
display: false
}
Код модуля:
function module(data){
// Изменяем данные
data.text = 'new text';
data.display = true;
}
Как это всё выглядит с наружи:
var data = getData(); // получаем объект data
// Ситуация - обрабатываем событие. Для этого передаем объект data всем модулям, которым он принадлежит
var modulesLength = modules.length;
while(modulesLength--){
modules[modulesLength](data); // Модули сделали всё, что им необходимо
}
// Обновляем представление в соответствии с объектом data.
update(data);
Отсюда видно, что представление изменится только после выполнения обработчиков модулей. Что бы можно было учесть эту ситуацию - я и предложил это решение. Цепочки тут не нужны. Цитата:
|
| Часовой пояс GMT +3, время: 22:31. |