0

既存のdijit.form.Buttonを拡張して、「topic」プロパティを受け入れ、そのコマンド/トピックonClickを公開しようとしています。私が思いついた解決策には、以前のButton.prototype_onClickメソッドへの参照が必要です。以下の使用例が引き続き機能するように、これをコーディングするためのより良い方法はありますか?

define(["dojo/_base/lang", "dijit/form/Button"], function(lang, Button) {
    var oldClick = Button.prototype._onClick;
    lang.extend(Button, {
        topic: null,
        _onClick: function(e) {
            alert('test');
            if (this.topic) {
                connect.publish(this.topic);
            }
            return oldClick.apply(this, arguments);
        }
    });
});

利用方法:

<button dojo-data-type="dijit.form.Button" data-dojo-props="topic: 'test'">Test</button>

require(["dojo/_base/connect"], function(connect) {
    connect.subscribe("test", function() {
        alert("you just clicked the test button");
    });
});​​
4

1 に答える 1

4

アスペクト指向プログラミングを検討してdojo/aspectください。

require([
    "dojo/aspect",
    "dojo/topic",
    "dijit/form/Button"
], function(
    aspect,
    topic,
    Button
) {

    aspect.after(Button.prototype, "_onClick", function(e) {
        this.topic && topic.publish(this.topic);
    });

    topic.subscribe("test", function() {
        console.log("test topic");         
    });

});​

実際の動作をご覧ください:http://jsfiddle.net/phusick/2rjfJ/

于 2012-06-11T15:25:24.717 に答える