@Michal - your reference info is great.
I have heard/seen a lot of confusion/hassle around the need for 'callChain'
within chained methods for auto run chaining actions.
The example below automatically calls the next function in the chain stack
without the need for using 'callChain'. It supports passing arguments to
each function in the chain and returning the value of the final function in
the chain.
I think it makes the usage of chains a lot more convenient as it fully
decouples 'Chain' from the actual chained functions.
Chain.implement({
run : function(){
while(this.$chain.length) var arguments =
this.$chain.shift().apply(this,$splat(arguments));
return arguments;
}
});
var myChain = new Chain();
myChain.chain(
function(x){ console.log('chain',x); return ++x; },
function(x){ console.log('chain',x); return ++x; },
function(x){ console.log('chain',x); return ++x; }
);
var x = myChain.run(1);
console.log(x);
/* output
chain 1
chain 2
chain 3
4
*/
On Mon, Apr 27, 2009 at 12:10 AM, Michal Charemza
<[email protected]>wrote:
>
> Just for reference, there is also quite a long post over at MooForum
> discussing chaining http://www.mooforum.net/help12/chain-guide-t1347.html
> (erm...
> written by me!)
>
> Michal.
>
>
>
> On 27 Apr 2009, at 02:37, nutron wrote:
>
> Chain has 2 main methods and you have to use both in order for it to do
>> anything:
>>
>> chain - pushes a function onto the stack
>> callChain - calls the next function on the stack
>>
>> so if you want to do:
>>
>> this.fn1().chain(this.fn2.bind(this));
>>
>> then fn1 has to have this in it:
>>
>> fn1: function(){
>> ...some logic that you want to execute
>> this.callChain();
>> return this;
>> }
>>
>> On Sun, Apr 26, 2009 at 6:17 PM, nwhite (via Nabble)
>> <ml-user%2b93763-1341009...@...> wrote:
>>
>> if(this.options.preload){
>> new Asset.images(['/images/myImage.png', '/images/myImage2.gif'], {
>>
>>
>>
>> onComplete: this.setUp
>>
>> });
>> }
>>
>>
>> On Sun, Apr 26, 2009 at 6:06 PM, mmjaeger <mmjae...@...> wrote:
>>
>> I'm not sure whether that would work.
>>
>> the following code actually does work but I hopped there is an easier
>> way to do it:
>>
>> /*
>>
>> if (this.options.preload) {
>> var callback = new Chain();
>> this._preload(callback);
>> callback.chain (
>> function() {
>> this.setUp();
>> }.bind(this)
>> )
>> } else {
>> this.setUp();
>> }*/
>>
>> On Apr 26, 5:17 pm, "asgaroth.belem" <asgaroth.be...@...> wrote:
>> > I think all you have to do is (not sure, sorry for any mistakes):
>> >
>> > this.function1().chain(this.function2());
>> >
>> > thats what chain is for, it wont execute function2 until function 1
>> > has ended. at least is what I think, i dont really use chain much.
>> >
>> > On 26 abr, 18:38, mmjaeger <mmjae...@...> wrote:
>> >
>> > > Hello
>> > > Hope somebody can help - I'm struggling with chaining two functions
>> >
>> > > this is the code I got:
>> >
>> > > this.function1().chain(
>> > > function() {
>> > > this.function2();
>> > > }
>> > > );
>> >
>> > > function1 has an onComplete event - like this:
>> >
>> > > I put the following in there:
>> >
>> > > onComplete: function() {
>> > > this.callChain();
>> >
>> > > }
>> >
>> > > function1 is basically a function to preload some image - when they
>> > > are loaded, I like to continue to execute function2.
>> >
>> > > Thank you in advance for your help.
>> >
>> > > What am I missing?
>>
>>
>> The MooTools Tutorial: www.mootorial.com Clientcide: www.clientcide.com
>>
>> View this message in context: Re: [Moo] Re: Struggling with chain
>> Sent from the MooTools Users mailing list archive at Nabble.com.
>>
>
>