Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 29.07.2013, 11:10
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от tenshi
Более существенные замечания будут?)
где точки с запятой?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #12 (permalink)  
Старый 29.07.2013, 11:20
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Они-то зачем?
__________________
.ня
Ответить с цитированием
  #13 (permalink)  
Старый 29.07.2013, 15:46
Аватар для MODist
Новичок на форуме
Отправить личное сообщение для MODist Посмотреть профиль Найти все сообщения от MODist
 
Регистрация: 12.11.2009
Сообщений: 9

Можно увидеть еще пару примеров? Хочется оценить читабельность и ясность синтаксиса библиотеки. Какой-нибудь характерный пример, где есть наследование, переопределение методов, примешивание. Скажем:

Disposable (примесь)
+ destroy
+ isDestroyed()

Observable (примесь)
+ events []
+ addEvent(eventName, callback, scope)
+ removeEvent(eventName, callback, scope)

Widget () (сюда примешиваем Disposable, Observable)
+ targetDomEL null
+ isRendered()
+ render(targetDomEl)
+ hide()
+ show()

ModalWindow-(наследуется от)->Widget
- title string
- titleDomEl
- contentDomEl
+ isClosed()
+ close()
+ setTitle(title) (делаем валидацию, что это точно string или number)
+ setContent(html)
Ответить с цитированием
  #14 (permalink)  
Старый 30.07.2013, 11:00
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Примерно так:

// Destroyable.js - поведение удаляемых объектов

$jin.property( 'Destroyable__destroyed', function Destroyable__destroyed( state ){
    if( !arguments.length ) return false
    
    if( state && !this.destroyed() ) this.proceedDestroy()
    
    return Boolean( state )
})

$jin.method( function Destroyable__proceedDestroy( ){ } )

// Спокойно примешиваем ко всем классам, потому что поведение это нужно всем, а тупые разработчики фреймворка этого не предусмотрели
$jin.mixin( 'Destroyable', '$jin_klass' )


// Renderable.js - поведение объектов, которые умеют рендерить себя в хтмл-элемент

$jin.property( 'Renderable__element', null )
$jin.method( function Renderale__rendered( state ){
    if( !arguments.length ) return Boolean( this.element() )
    
    state = Boolean( state )
    var rendered = this.rendered()
    if( state === rendered ) return this
    
    if( rendered ) this.proceedDeRender()
    else this.proceedRender()
    
    return this
})


// Observable.js - поведение объектов, на события которых можно подписываться

$jin.property( 'Observable__mapping', Object )

$jin.method( function Observable__listen( eventName, handler ){
    var mapping = this.mapping()
    var handlerList = mapping[ eventName ] = mapping[ eventName ] || []
    
    if( !~handlerList.indexOf( handler ) ) handlerList.push( handler )
    
    return { destroy: function( ){
        handlerList.splice( handlerList.indexOf( handler ), 1 )
    } }
} )

$jin.method( function Observable__scream( event ){
    var handlers = this.mapping()[ event.name ] || []
    handlers.forEach( function( handler ){
        handler( event )
    })
    return this
})


// Widget.js - класс с базовым поведением виджета

$jin.klass( 'Observable', 'Renderable', 'Widget' )
$jin.property( 'Widget__elementClass', String )

$jin.method( function Widget__visible( state ){
    if( !arguments.length ){
        return this.element().style.display !== 'none'
    }
    
    this.element().style.display = state ? '' : 'none'
} )

$jin.method( function Widget__proceedRender( ){
    var element = document.createElement( 'div' )
    element.className = this.elementClass()
    document.body.appendChild( element )
    
    this
    .element( element )
    .scream({ name: 'rendered' })
    
    return this
})

$jin.method( function Widget__proceedDeRender( ){
    var element = this.element()
    element.parentNode.removeChild( element )
    
    this
    .element( null )
    .scream({ name: 'derendered' })
    
    return this
})

$jin.method( 'Destroyable__proceedDestroy', function Widget__proceedDestroy( ){
    return this.rendered( false )
})


// ModalWindow.js - конкретный полностью работоспособный виджет

$jin_klass( 'Widget', 'ModalWindow' )

$jin.property( 'Widget__elementClass', 'ModalWindow__elementClass',
function( value ){
    return String( value || 'popup' )
} )

$jin.property( 'ModalWindow__title', String )
$jin.property( 'ModalWindow__titleClass', function( value ){
    return String( value || 'popup-title' )
} )

$jin.property( 'ModalWindow__content', String )
$jin.property( 'ModalWindow__contentClass', function( value ){
    return String( value || 'popup-content' )
} )

$jin.method( function ModalWindow__proceedRender( ){
    this.Widget__proceedRender()
    var element = this.element()
    
    var title = document.createElement( 'div' )
    title.className = this.titleClass()
    title.innerText = this.text()
    element.appendChild( title )
    
    var content = document.createElement( 'div' )
    content.className = this.contentClass()
    content.innerText = this.content()
    element.appendChild( content )
    
    return this
})

ModalWindow()
.elementClass( 'introduction-popup' )
.title( 'Intruduction' )
.content( '<iframe src="//youtu.be/xAHJIyfUSwU"></iframe>' )
.rendered( true )
__________________
.ня

Последний раз редактировалось tenshi, 02.08.2013 в 23:55.
Ответить с цитированием
  #15 (permalink)  
Старый 08.08.2013, 18:52
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от nerv_
вЯваСкриптеCamelCase
Стараюсь никода не использовать CamelCase (разве что для функций-конструкторов)
Ответить с цитированием
  #16 (permalink)  
Старый 18.08.2013, 14:03
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от monolithed
Стараюсь никода не использовать CamelCase (разве что для функций-конструкторов)
почему? Я придерживаюсь мнения, что надо писать в "едином ключе/стиле", который задан окружением (браузером) и самим языком (Array.indexOf).
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #17 (permalink)  
Старый 19.08.2013, 20:30
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

А мне как-то пофиг. Не стоит предавать слишком большое значение оформлению. Лучше над содержанием подумайте.
__________________
.ня
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Снова вернуть обработчик, on(), off() Deliaz jQuery 4 11.08.2012 19:23
И снова драг энд дроп :) (Sandr) Элементы интерфейса 9 08.03.2012 23:23
Снова о slideToggle. Артефакты в ие9. Nyamo jQuery 1 27.01.2012 11:17
Снова динамический select Lion_astana Элементы интерфейса 4 19.11.2010 11:48
Снова проблема с событиями boneg Events/DOM/Window 0 13.10.2010 18:05