2013-09-25 80 views
0

我有以下两个回调函数。我想知道是否有可能在clipname和has_clip函数之间共享名称对象?这是为使用liveton而开发的,但是我确定它只是一个普通的javascript事物。跨回调函数共享数据

function loadclips() { 

    names = new LiveAPI(this.patcher, 1, clipname, “live_set tracks 0 clip_slots 1 clip”); 
    names.property = “name”; 

    slot = new LiveAPI(this.patcher, 1, has_clip, “live_set tracks 0 clip_slots 1”); 
    slot.property = “has_clip”; 

} 

function clipname(args) { 
    post(args); 
} 

function has_clip(args) { 
    post(args); 
} 
+0

关注您的全球范围; '名称'是一个全球性的,但我怀疑你想要它。 – jcollum

回答

1

我认为最安全的事情是从loadClips返回一个对象(似乎也很明智)。确保在新变量上使用varGlobal scope pollution可能会引入难以发现的错误。

function loadclips() { 

    var names = new LiveAPI(this.patcher, 1, clipname, “live_set tracks 0 clip_slots 1 clip”); 
    names.property = “name”; 

    var slot = new LiveAPI(this.patcher, 1, has_clip, “live_set tracks 0 clip_slots 1”); 
    slot.property = “has_clip”; 

    return { 
    names: names, 
    slot: slot 
    }; 

} 

然后将其传递给任何可能需要它的函数。

function clipname(args, namesAndSlots) { 
    // namesAndSlots is available here 
    post(args); 
} 

function has_clip(args, namesAndSlots) { 
    // namesAndSlots is available here 
    post(args); 
} 

现在,您可以拨打loadClips:

var namesAndClips = loadClips(); 

var clip = clipName('a', namesAndClips); 

我觉得这是更接近你所需要的反正。

+0

我试过了,它看起来没错,但是在函数的背景下它不起作用。我无法得到“slot.property =”has_clip“;”显示在剪辑名称功能中。它只是作为“未定义” –

+0

尝试在'var slot = new LiveAPI'之后将插槽对象记录到控制台 - 请参阅LiveAPI呼叫返回的内容 – jcollum

+0

@Ke。你修好了吗? – jcollum