Nie można tego zrobić tak, jak chcesz bez użycia nieudokumentowanych funkcji.
Jeśli spojrzeć na Collection#add
zobaczymy to:
add: function(models, options) {
//...
for (i = 0, l = add.length; i < l; i++) {
(model = add[i]).trigger('add', model, this, options);
}
//...
}
Uwaga czwarty argument trigger
. A jeśli spojrzeć na udokumentowany interfejs dla trigger
:
spustobject.trigger(event, [*args])
Callbacki progowe dla danego imprezy lub przestrzeni oddzielonych listy zdarzeń. Kolejne argumenty do wyzwalacza wyzwalacza będą przekazywane dalej do wywołań zwrotnych zdarzeń.
Więc add
wezwie słuchaczy jak f(model, collection, options)
gdzie options
jest taka sama options
co przeszedł do Collection#add
.Powoduje to, że jeśli to zrobić:
this.collection.add(predefinedModel, { undocumented: 'arguments' })
następnie można zrobić to w swojej callback:
triggerthis: function(model, collection, options) {
console.log(options.undocumented);
}
Demo: http://jsfiddle.net/ambiguous/bqWwQ/
Mogłabyś tunelu oczywiście cały tablicy lub obiektu przez options
w ten sposób.
Trzeci argument za "add"
zdarzeń nie jest udokumentowana (przynajmniej nie że znajdę), najbliższa rzecz do dokumentacji jest to notatka w 0.3.3 Changelog entry:
Wszechobecne options
argument jest teraz przekazywany jako ostateczny argument do wszystkich zdarzeń "change"
.
Nie polecałbym tego podejścia, ale jest tam, jeśli jest to potrzebne; oczywiście będziesz musiał to uwzględnić w swoim pakiecie testowym, a będziesz musiał upewnić się, że nie użyjesz żadnych kluczy w numerze options
, którego użyje Szkielet.
Bezpieczniejsze podejście byłoby dołączyć jakieś dodatkowe właściwości do modelu
model.baggage = { some: 'extra stuff };
a następnie obrać że off w callback:
triggerthis: function(model, collection) {
var baggage = model.baggage;
delete model.baggage;
//...
}
Demo: http://jsfiddle.net/ambiguous/M3UaH/
Można również użyć różnych wywołań zwrotnych do różnych celów lub przekazać dodatkowy parametr jako pełnowartościowe atrybuty modelu.
Jest też _.bind
:
this.collection.on("add", _.bind(function(collection, model, extra) { ... }, context, collection, model, 'whatever you want'));
ale że zwiąże argumenty od lewej do prawej, więc musisz określić wszystkie argumenty, że zwrotna będzie potrzebne.
Demo: http://jsfiddle.net/ambiguous/jUpJz/
Ponieważ 'triggerthis' obsługi zdarzeń będzie wywoływana przez kod zdarzenia szkieletowej, gdzie można się spodziewać tych dodatkowy argument pochodzi? –
Przepraszam, ale nie jestem pewien, jak to działa. Przypuszczam, że mogę wywołać anonimową funkcję w on(), która wywołuje triggerthis wewnątrz, ale nie jestem pewien, czy to jest dobry sposób, aby kontynuować. – chenglou