Цитата:
Цитата:
Цитата:
|
отлично, а теперь попробуй с помощью 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, время: 08:39. |