That said, JS in Max is really a slightly ugly cousin of browser based javascript. Calls to objects are long winded and basically everything is a bit head wrecking!
So here we go: the first in my "Making Max JS less crap" series... The infamous dollar function! All you need to do to access a max object is give the object a scripting name in the inspector* and then use: $('scriptingname')
Please see right hand pane before copying my code>>
function $(stringref){
stringref=stringref.replace(/parent/gi, "parentpatcher")
var path=stringref.split('.')
var obj=this.patcher
for(i in path){
if(path[i]=='parentpatcher'){ //up 1 level:
obj=obj.parentpatcher
}else{
obj=obj.getnamed(path[i])
if(i!=path.length-1){ //down 1 level:
obj=obj.subpatcher()
}
}
}
return(obj)
}
//USAGE:
$("myButton").message('set','new text!') //access 'myButton' object in current patcher
$("parent.myButton").message('set','new text!') //access 'myButton' object in parent patcher
$("myPatcher.myButton").message('set','new text!') //access 'myButton' object in child patcher
$("parent.myPatcher.myButton").message('set','new text!') //access 'myButton' object in sibling patcher
* If you're not bothered giving every patcher a unique scripting name in the inspector, try my lazy dollar function instead.UPDATE:
A good way to use this function is to use Luke Hall's include script. Save his script into your jsexternals folder, save my functions into your project folder as basefunctions.js (or something similar) and then you can simply use include(this,"basefunctions.js") at the top of every JS file you use. Thanks Luke - this is awesome!
179 comments:
Post a Comment