ФорумПрограммированиеJavaScript → jquery bind scope

jquery bind scope

  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 30 июня 2009 г. 16:30

    вопрос больше касается удобочитаймости чем функциональности.
    для того чтобы в жуквери добавить событие пишем

    $("#id").click(function(){…})


    но если надо добавить в событие моих данных надо переписывать на bind
    $("#id").bind("click",object,function(){…})


    допустим я вешаю событие внутри метода какого-то объекта и хочу передать внутрь события этот объект для того чтобы был доступен еще какойто метод в контексте


    var myObj = {
    bind : function(){
    $("#id").bind("click",this,function(e){
    var objInst = e.data;
    objInst.doSmth();
    });
    },
    doSmth : function(){

    }


    вопрос про область видимости. стоит ли передавать объект как данные (как в примере выше) или использовать из верхней области видимости (как в примере ниже)


    var myObj = {
    bind : function(){
    var self = this;
    $("#id").click(function(e){
    // this == #id
    self.doSmth();
    });
    },
    doSmth : function(){

    }



  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 30 июня 2009 г. 17:38, спустя 1 час 7 минут 44 секунды

    По удобочитаемости мне нравиться второй вариант больше
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 июня 2009 г. 17:53, спустя 15 минут 13 секунд

    я не понял сильно задачу, но

    $("#id").click(function () {
    _callback_setter = $(this);
    $("#id2").click(function () {
    _callback_setter.lalal();
    });
    });


    или не это имелось ввиду?
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 30 июня 2009 г. 18:07, спустя 14 минут 13 секунд

    это. ты тоже за то чтоб брать объект из внешнего окружения а не передавать

    почему?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 июня 2009 г. 18:07, спустя 23 часа 59 минут 56 секунд


    это. ты тоже за то чтоб рать объект из внешнего окружения а не передавать
    да конечно, просто через байнд все делать - пиздец код некрасивый получится
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 2 июля 2009 г. 15:38, спустя 1 день 21 час 30 минут

    ну зачем сразу все
    Спустя 163814 сек.
    я так и не добился вразумительного объяснения почему.
    дам еще пару примеров хорошего использования бинда

    можно вешать сразу на два события

    $(window).bind('resize load',this, function(e) {


    e.data.method();
    });


    только так можно повесить методы

    obj.prototype = {
    elt : null
    init : function(){
    this.elt = $("#elt").bind('keypress', this, self.keypress);
    }
    keypress:function(e){
    e.data.elt.text("хуй вам");
    }
    }


    в первом случаи можно обойтись без e.data таким образом


    var self = this;
    $(window).bind('resize load',function(e) {
    self.method();
    });

    а вот во втором хуй вам, придется использовать e.data

    так вот внимание вопрос: стоит ли весь код чесать под одну гребенку и использовать e.data даже там где без него можно было бы обойтись для однородности кода?!
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 2 июля 2009 г. 15:39, спустя 1 минуту 51 секунду

    up
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 2 июля 2009 г. 15:50, спустя 10 минут 50 секунд

    ккой то пиздец, надо при склейке чтобы в новых появлялось …
    Спустя 6 сек.
    попробую подумать сегодня ..
    Сапожник без сапог
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 3 июля 2009 г. 10:12, спустя 18 часов 22 минуты


    ккой то пиздец, надо при склейке чтобы в новых появлялось …
    Спустя 6 сек.
    попробую подумать сегодня ..
    up:)
    все умрут, а я изумруд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!