小编Eua*_*n M的帖子

setTimeout()没有等待

我想用Javascript进行秒倒计时.

这是我的HTML

<div id="ban_container" class="error center">Please wait
        <span id="ban_countdown" style="font-weight:bold">
        45</span>
        seconds before trying again
</div>
Run Code Online (Sandbox Code Playgroud)

我的JS:

<script type="text/javascript">
    var seconds = <?php echo $user->getBlockExpiryRemaining(); ?>;

    function countdown(element) {
        var el = document.getElementById(element);

        if (seconds === 0) {
            document.getElementById("ban_container").innerHTML = "done";
            return;
        }
        else {
            el.innerHTML = seconds;
            seconds--;
            setTimeout(countdown(element), 1000);
        }
    }

    countdown('ban_countdown');
</script>
Run Code Online (Sandbox Code Playgroud)

但是由于某种原因,它不会等待超时时间,而是立即执行countdown,这样当我刷新页面时它就会立即显示"完成".我知道它实际上是多次被执行,因为如果我这样做,innerHTML += seconds + " ";它会从45开始倒数.为什么超时会被超时?

javascript timeout settimeout

30
推荐指数
2
解决办法
2万
查看次数

Smalltalk中自我和你自己有什么区别?

在Smalltalk中,方法体中经常有两个术语:selfyourself.

他们之间有什么区别?

smalltalk visualworks squeak pharo amber-smalltalk

18
推荐指数
2
解决办法
3570
查看次数

如何学习Pharo

我安装了Pharo 1.4并尝试阅读"Pharo by example".

不幸的是,这本书和Pharo图像完全不同步:菜单不同; 用作例子的类不存在例如; BouncingAtomsMorph类.

很可惜.也许应该使用特定的Pharo版本来学习,另一个应该使用最新版本...任何人都可以帮忙吗?

smalltalk pharo

11
推荐指数
2
解决办法
4873
查看次数

在Squeak/Pharo中浏览VisualWorks代码

在Squeak/Pharo中是否有任何Smalltalk解析器允许我在Squeak/Pharo中浏览VisualWorks代码?我有兴趣阅读以块格式(而不是XML格式)导出的代码.

澄清:我不需要提交代码.

谢谢

smalltalk visualworks squeak pharo

9
推荐指数
1
解决办法
532
查看次数

Squeak中的拦截消息

我试图理解Smalltalk中更好的反映.我使用的是最新版本的Squeak(v4.3).我想拦截发送到我的一个类的实例的每个消息.我假设我可以覆盖这个方法,ProtoObject>>withArgs:executeMethod但是StéphaneDucasse向我解释说,出于性能原因,这个方法没有被使用(这是我自己对他答案的总结).我应该覆盖哪种方法/如何拦截已发送的消息?

这是我尝试的代码:

Object subclass: #C
    instanceVariableNames: 'i'
    classVariableNames: ''
    poolDictionaries: ''
    category: 'CSE3009'.

C class compile: 'newWithi: anInt
    ^(self new) i: anInt ; yourself.'.

C compile: 'withArgs: someArgs executeMethod: aMethod
    Transcript show: ''Caught: ''.
    ^ super withArgs: someArgs executeMethod aMethod.'.

C compile: 'foo: aText
    Transcript show: aText.
    Transcript show: i.
    Transcript cr.'.

C compile: 'i: anInt
    i := anInt.'.

o := C newWithi: 42.
o foo: 'This is foo: '.
Run Code Online (Sandbox Code Playgroud)

执行这整段代码会产生:

This is foo: 42
Run Code Online (Sandbox Code Playgroud)

当我想要:

Caught: This …
Run Code Online (Sandbox Code Playgroud)

reflection smalltalk metaclass squeak objc-message-send

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

Pharo smalltalk + Seaside中的定时器回调

我刚刚将我的Dolphin Smalltalk + Seaside应用程序移植到最新的Pharo Smalltalk 4.0和Seaside 3.1.在其中,我需要每秒从(浏览器)客户端到(Pharo)服务器进行回调以更新视图.

我有这段代码每秒自动按下"更新"按钮.但是在到Pharo的港口后它不再起作用了:

html script: (
    ( html jQuery: '#updateButton' ) 
        call: 'click';
        interval: 1000 ).
Run Code Online (Sandbox Code Playgroud)

我在网上寻找其他(更优雅的?)解决方案,但似乎无法让它们起作用.任何人都可以给我一个如何进行的提示吗?

这是由上面的代码生成的JavaScript代码,用于在Dolphin + Seaside中工作:

<script type="text/javascript">
/*
<![CDATA[/setInterval(function(){$("#updateButton").cl??ick()},2000)/]]>
*/</script> 
Run Code Online (Sandbox Code Playgroud)

smalltalk seaside pharo

4
推荐指数
1
解决办法
226
查看次数

如何在Smalltalk的范围内生成随机整数?

我正在学习的课程要求我们在smalltalk中完成所有编码(这是一个Design类).在我们的一个项目中,我希望做一些事情,并且很难找到如何做到这些.似乎大多数人所做的就是修改自己的smalltalk版本来做他们需要做的事情.我不能自由地这样做,因为当我没有相同的内置方法时,这会导致我教授的计算机出错.

这是我要做的事情:

随机数.我需要创建一个1到1000之间的随机数.现在我正在伪造它

rand := Random new.
rand := (rand nextValue) * 1000.
rand := rand asInteger.
Run Code Online (Sandbox Code Playgroud)

这给了我一个0到1000之间的数字.有没有办法在一个命令中执行此操作?相近

Random between: 0 and: 1000
Run Code Online (Sandbox Code Playgroud)

和/或陈述.这个人把我的生活日光所困扰.我尝试了几种不同的配置

(statement) and: (statement) ifTrue...
(statement) and (statement) ifTrue...
Run Code Online (Sandbox Code Playgroud)

所以我用嵌套的ifTrue语句伪装它:

(statement) ifTrue:[
    (statement) ifTrue:[...
Run Code Online (Sandbox Code Playgroud)

在smalltalk中做和/或随机的正确方法是什么?

random smalltalk logical-operators

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

Date dayMonthYearDo的正确参数是什么:在Smalltalk(Pharo/Squeak)中看起来像

Date dayMonthYearDo: aBlock 
"Supply integers for day, month and year to aBlock and return the result"

^ start dayMonthYearDo: aBlock
Run Code Online (Sandbox Code Playgroud)

此消息的典型有效块应该是什么样的?

smalltalk date squeak pharo

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

如何在Smalltalk中访问类变量

我试图在Smalltalk的一个类中访问一个类变量.

我有两个类:Class1和Class2.

Class1具有以下变量:年月日小时分钟.Class2具有以下变量:start-time end-time.在Class2的initialize方法中,我有以下内容:

start-time := Class1 new.
end-time := Class1 new.
Run Code Online (Sandbox Code Playgroud)

现在我想将2012年分配给开始时间,如何在Class1对象的启动时间中访问year变量?

variables smalltalk class squeak pharo

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

为什么setTimeout没有等待调用函数?

我想创建一个简单的游戏.我试图在几秒钟后递归复制一个div.重复后,它会使用新的唯一ID(ID + i)创建新的div.

这个想法是它不断创建div,用户必须点击它们才能在它达到最大值(游戏结束)之前尽可能地删除它们.

它不会正确等待创建div.我想每隔几秒就从现有的div中创建新的div,但是一旦我运行它就创建全部15或者它只创建1并停在那里.

JSFIDDLE - https://jsfiddle.net/namelesshonor/msrkxq63/

function spawnFly() {
if(x >= 15){
    alert("YOU LOST\n15 Flys have infested your screen!");
}
else if(x < 15) {   
    x++; // adds another fly to the counter 
    setTimeout(duplicate(), 2000); // spawns a new fly after a few secs
    animateDiv(); // animate the spawned fly
    spawnFly(); // called recursively until fly count is met
}   
};

function duplicate() {
var original = document.getElementById('fly'+i);
var clone = original.cloneNode(true);
clone.id = "fly" + i++;
clone.onclick …
Run Code Online (Sandbox Code Playgroud)

html javascript jquery settimeout

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