Jestem nowicjuszem w Backbone, ale mam ponad 4 lata doświadczenia w innej strukturze, która oczekuje również, że przekażesz obiekt zawierający metody do metody rozszerzającej, ale problem polega na tym, że nie daje to dostatecznie drobiazgowej kontroli do działania metody zawarte w przekazywanym obiekcie.
Aby uzyskać większą kontrolę, można zamiast tego przekazać zamknięcie, aby przedłużyć, a zamknięcie może zwrócić obiekt. Technika ta w ogólności pozwala na dokładniejszą kontrolę i większą możliwość wyrafinowania i może być wykorzystana do rozwiązania konkretnego problemu.
Wewnątrz zamknięcie, które powraca do metod, metody te mogą być podzielone na dwie główne kategorie:
- trzon specyficzne np konstruktor & zainicjować
- Niestandardowa, specyficzne dla danej aplikacji
Jeśli wrócimy metody niestandardowe specyficzne dla naszej aplikacji z własnej oddzielny obiekt, możemy użyć _.bind dla „częściowego zastosowania” z _.bindAll tylko te niestandardowe nazwy metod.
Składając to wszystko razem, to:
var foobar = Backbone.Model.extend(function() {
var foobarMethods = modelMethods();
return _.extend({}, foobarMethods, {
constructor: function() {
_.bind(_.bindAll, this, _.keys(foobarMethods));
// equivalent to _.bindAll(this, 'foo', 'bar') except that the above
// allow methods to be arbitrarily added or removed
},
initialize : function() {}
});
//It's possible to "mixin" these methods from another file
function modelMethods() {
return {
foo: function() {},
bar: function() {},
}
}
}());
nie wiem, co starasz się podkreślić, zacząłem się jsfiddle dla niego, ale można go wypełnić swój Actuall problemów z metody wiązania podkreślenia jest? http://jsfiddle.net/saelfaer/7fCbT/ – Sander