相关疑难解决方法(0)

如何解决ActionScript 3(AS3)中的闭包问题

在下面的代码中,我试图加载一些图像,并在它们单独加载后立即将它们放入舞台.但它被窃听,因为只显示最后一张图像.我怀疑这是一个关闭问题.我该如何解决?AS3中的闭包行为与Java Script中的行为不一样吗?

var imageList:Array = new Array();
imageList.push({'src':'image1.jpg'});
imageList.push({'src':'image2.jpg'});
var imagePanel:MovieClip = new MovieClip();
this.addChildAt(imagePanel, 0);

for (var i in imageList) {
    var imageData = imageList[i];
    imageData.loader = new Loader();

    imageData.loader.contentLoaderInfo.addEventListener(
        Event.COMPLETE, 
        function() {
            imagePanel.addChild(imageData.loader.content as Bitmap);
            trace('Completed: ' + imageData.src);             
        });

    trace('Starting: ' + imageData.src);
    imageData.loader.load(new URLRequest(imageData.src));   
}
Run Code Online (Sandbox Code Playgroud)

apache-flex flash closures actionscript-3

25
推荐指数
1
解决办法
6046
查看次数

使用JavaScript进行Alt属性编码

Html实体必须在HTML页面中的图像的alt属性中进行编码.所以

<img id="formula" alt="A &rarr; B" src="formula.png" />
Run Code Online (Sandbox Code Playgroud)

会运作良好.

另一方面,相同的JavaScript代码将无法使用

document.getElementById('formula').alt = 'A &rarr; B';
Run Code Online (Sandbox Code Playgroud)

并将产生A→ B而不是A→B.

当无法在源代码中放入特殊(未编码)字符时,如何通过JavaScript实现?

html javascript encode special-characters

8
推荐指数
2
解决办法
6841
查看次数

全局Javascript事件处理对象上下文

我在Javascript中的事件处理程序中遇到以下问题.我有一个像这样有一个mousemove事件处理程序的对象.

function MyObject(){ }
function MyObject.prototype = {

    currentMousePosition: null,
    onMouseMove: function(ev){
       this.currentMousePosition = this.getCoordinates(ev);
    },
    getCoordinates: function(ev){
        if (ev.pageX || ev.pageY)
            return { x: ev.pageX, y: ev.pageY };

        return { x: ev.clientX + document.body.scrollLeft - document.body.clientLeft, y: ev.clientY + document.body.scrollTop - document.body.clientTop };
    }

};
Run Code Online (Sandbox Code Playgroud)

我试图解决的问题解决了对象上下文.在我的onMouseMove函数中,它分配currentMousePosition属性.当然这不起作用,因为它是处理mousemove事件的静态函数.

我正在寻找的是一种使用我的事件处理程序传递对象上下文的技术/方法.我能想到的最好的例子是Google Maps API函数GEvent.bind()有了它,您可以使用要在指定事件上触发的函数传递对象.我基本上都在寻找同样的东西.

javascript oop javascript-events objectcontext

5
推荐指数
1
解决办法
2010
查看次数

在setTimeout上更改匿名函数的范围会导致奇怪的警告

这让我感兴趣的纯粹是研究和个人发展.我有一组命名空间的函数/变量.

在1个函数中我需要通过setTimeout调用另一个函数但是将范围保持为'this'.我正在努力解决这个问题,似乎无法在setTimeout运行时绑定它.

var foo = {
    ads: ["foo","bar"],
    timeDelay: 3,
    loadAds: function() {
        var al = this.ads.length;
            if (!al)
                return; // no ads

            for(var i = 0; i < al; i++) {
                setTimeout(function() {
                    this.scrollAd(this.ads[i]);
                }.apply(this), this.timeDelay * 1000);
            }
        },
        scrollAd: function(adBlock) {
            console.log(adBlock);

        }
    };
};
Run Code Online (Sandbox Code Playgroud)

.apply(this)DOES更改范围,因为console.log输出正确的对象,但它会立即运行该函数,然后在回调保持为空时出现异常/警告:

useless setTimeout call (missing quotes around argument?)
Run Code Online (Sandbox Code Playgroud)

这样做有一种优雅的方式吗?我知道我能做到

var _this = this;
Run Code Online (Sandbox Code Playgroud)

_this在anon回调中引用.例如,在mootools我会用.bind(this)...

不,因为这涉及动画,我不想" "在字符串周围使用,因为它需要进行评估并会影响性能......

javascript scope

3
推荐指数
1
解决办法
5681
查看次数

有什么办法可以避免在jQuery中使用匿名函数?

如果我有一大堆这样的代码:

.hover(
        function () {
            hoverState($("#navbar a").index(this),1);
        },
        function () {
            hoverState($("#navbar a").index(this),-1);
});
Run Code Online (Sandbox Code Playgroud)

有没有办法摆脱匿名函数,只是说:

.hover(
    hoverState($("#navbar a").index(this),1),
    hoverState($("#navbar a").index(this),-1);
);
Run Code Online (Sandbox Code Playgroud)

javascript jquery anonymous-function

1
推荐指数
2
解决办法
1013
查看次数