4

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");

第二行不是在现有按钮上设置选项,而是创建一个新按钮。我不知道如何解决这个问题。

那么,有没有办法制作一个遵循Liskov 替换原则的子类小部件?

4

1 回答 1

3

我不知道这种方法,但可以使用这种方法.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

于 2011-03-10T11:20:30.087 回答