2013-06-07 10 views
6

faceci, jestem nowy na backboneJs i próbowałem napisać podstawowy program, aby zwrócić wartość w events.on jak poniżej, ale to nie działa.backbone js nie może zwrócić wartości w wydarzeniach na

$(function(){ 
    // object.on(event, callback, [context])Alias: bind 
    var object = {}; 
    _.extend(object, Backbone.Events); 

    object.on('add',function(a,b){ 
     return a + b; 
    }); 

    var sum = object.trigger('add',1,3); 
    // not as I expected. 
    alert(sum); 
}); 

Mam nadzieję, że ktoś da mi pewne ideały, wielkie dzięki.

Odpowiedz

4

Poprzeczne. Zdarzenia nie są tworzone w celu zwrócenia wartości, ale jako mechanizm powiadamiania o obiektach. Zwracane wartości zarejestrowanych wywołań zwrotnych są ignorowane i zwracany jest faktyczny obiekt, na który wywołano zdarzenie (dlatego suma nie zawiera 4).

Jeśli naprawdę trzeba wyodrębnić coś z imprezy można zrestrukturyzować swój kod tak:

$(function(){ 
    // object.on(event, callback, [context])Alias: bind 
    var object = {}; 
    _.extend(object, Backbone.Events); 

    // register variable outside of callback scope 
    var sum; 
    object.on('add',function(a,b){ 
     // store result inside variable coming from outside 
     sum = a + b; 
    }); 

    // trigger don't return anything, but sum variable will be filled  
    object.trigger('add',1,3); 
    // not as I expected. 
    alert(sum); 
}); 
+0

dzięki dużo , to działa! – user2015680

1

wymyślić innego rozwiązania dotyczące tej kwestii, jak poniżej:

$(function(){ 
    // object.on(event, callback, [context])Alias: bind 
    var object = {}; 
    _.extend(object, Backbone.Events); 

    // add a attribute 'sum' for the object, to hold the value. 
    object.on('add',function(a,b){ 
     return this.sum = a+b; 
    }); 
    var r = object.trigger('add',1,3); 
    alert(r.sum); 
}); 
Powiązane problemy