首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ext 3教程代码与Ext 4不兼容

Ext 3教程代码与Ext 4不兼容
EN

Stack Overflow用户
提问于 2011-06-03 22:31:54
回答 3查看 923关注 0票数 1

我想把this教程从Ext3重写成Ext4。但从我所能观察到的情况来看,createDelegate函数被删除了(就像许多其他东西一样),并且它不能工作。我尝试调用call/apply而不是这个未定义的createDelegate,但随后在代码中遇到了其他问题-- this.msgEl未定义。如何解决这个问题?

代码语言:javascript
复制
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Panel</title>
<link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" />
<script type="text/javascript" src="bootstrap.js"></script>
<script type="text/javascript" src="ext-all.js"></script>
<script type="text/javascript" src="shared/examples.js"></script>
<style type="text/css">
    body {
        padding: 10px;
    }

    .x-popup-el {
        position: absolute;
        background: transparent url(resources/images/default/qtip/tip-sprite.gif) no-repeat right 0;
        border-left:1px solid #99BBE8;
        padding-right:6px;
        overflow:hidden;
        zoom:1;
    }

    .x-popup-body {
        background: transparent url(resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -62px;
        padding-top:3px;
        overflow:hidden;
        zoom:1;
    }

    .x-popup-message-text {
        padding:0 20px 0 10px;
        font-family:helvetica,tahoma,verdana,sans-serif;
    }

    .x-popup-message-text.error {
        color: red;
    }
</style>
<script type="text/javascript">

Ext.ux.PopupMessage = Ext.extend(Object, {
    init: function(c) {
        this.client = c;
        c.showMessage = this.showMessage.apply(this);
        if (c.rendered) {
            this.onRender(c);
        } else {
            c.on('render', this.onRender, this);
        }
    },

    onRender: function(c) {
        this.el = c.el.createChild(
            '<div class="x-hidden x-popup-el">' + 
                '<div class="x-popup-body">' +
                    '<span class="x-popup-message-text"></span>' +
                '</div>' +
            '</div>'
        );
        this.el.syncFx();
        this.msgEl = this.el.child('span.x-popup-message-text');
    },

    showMessage: function(m, cls) {
        if (this.fading) {
            clearTimeout(this.fading);
            this.fading = 0;
        }
        console.log(this);
        this.msgEl.dom.innerHTML = m;
        if (cls) {
            this.msgEl.extraCls = cls;
            this.msgEl.addClass(cls);
        }
        this.el.stopFx();
        this.el.alignTo(this.client.el, "bl-bl", [0, -1]);
        this.el.slideIn('b').fadeIn({
            callback: this.hide,
            scope: this
        });
    },

    hide: function() {
        this.fading = this.el.fadeOut.defer(5000, this.el, [{
            callback: function() {
                this.msgEl.removeClass(this.msgEl.extraCls);
            },
            scope: this
        }]);
    }
});

Ext.onReady(function(){
    p = new Ext.Panel({
        plugins: new Ext.ux.PopupMessage(),
        frame: true,
        title: 'My Panel',
        renderTo: document.body,
        width: 400,
        html: Ext.example.bogusMarkup
    });

    new Ext.Toolbar({
        renderTo: document.body,
        style: {
            'margin-top': '20px'
        },
        width: 400,
        items: [{
            text: 'Show message',
            handler: function() {
                p.showMessage("Hello world!");
            }
        }, {
            text: 'Show error message',
            handler: function() {
                p.showMessage("Something bad!", "error");
            }
        }]
    });
});
</script>
</head>
<body>
</body>
</html>

错误:

代码语言:javascript
复制
this.msgEl is undefined
file:///C:/Work/learn-tmp/Popup.html
Line 76
EN

回答 3

Stack Overflow用户

发布于 2011-06-04 09:32:32

createDelegate现在是一个静态方法-- Ext4中删除了所有原生JS对象原型覆盖。因此,您可以使用Ext.Function.createDelegate(myFn, this)或更好的别名Ext.bind(myFn, this)来代替myFn.createDelegate(this)

票数 2
EN

Stack Overflow用户

发布于 2011-06-03 22:38:53

我还没有使用Ext4,但是可以从使用ext-all-debug.js开始,而不是ext-all.js。您可能会获得有关导致错误的原因的更具体信息。

票数 0
EN

Stack Overflow用户

发布于 2011-06-04 09:04:13

change : c.showMessage = this.showMessage.apply(this);

to : c.showMessage = this.showMessage.apply(this,arguments);

这将调用' This‘作用域中的数组函数,并使用参数“showMessage”,其中包含调用该函数时使用的参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6228430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档