Как сделать подкласс виджета - PullRequest
4 голосов
/ 07 марта 2011

В jQuery UI 1.8 добавлена ​​возможность расширять виджет с помощью кода, подобного следующему:

$.widget("my.weirdbutton", $.ui.button, {
});

Теперь я могу создать weirdbutton, и он работает как кнопка:

$("#myButton").weirdbutton();

Однако, запускаются только странные события. Так что, если у меня есть что-то вроде

$(".button").bind("buttoncreate", function() { 
    console.log("a button was created"); 
});

Я буду скучать по созданию странных кнопок. Это можно исправить, вручную вызвав события кнопки из виджета странной кнопки. Не отлично, но работает.

Большая проблема в том, что подобный код не будет работать:

$("#mybutton").weirdbutton();
$("#mybutton").button("option", "text", "My New Text");

Вторая строка, вместо установки опции для существующей кнопки, создает новую. Я не знаю, как это исправить.

Итак, есть ли способ создать виджет подкласса, который следует принципу замены Лискова ?

1 Ответ

3 голосов
/ 10 марта 2011

Я не знаю для подхода .bind, но заменить исходный метод _create можно, используя этот подход:

$.widget("my.weirdbutton", $.ui.button, {
    _create: function() {
       $.ui.button.prototype._create.call(this);
       console.log("a button was created");
    }
});  

Тогда, если вы сделаете (в документе):

$(function() {
  $("#myButton").weirdbutton();      
});

Вы должны получить console.log

Полный код здесь: http://jsbin.com/icota4/11/edit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...