Вы должны сделать Spine.Class.sub
, так как вам не нужна модель.Во-вторых, измените привязку на: SomeModel.unbind("onChange");
.Таким образом, все обратные вызовы очищаются.Но вы правы ... если вы заверните unbind с прокси-вызовом или без него, это не сработает.Поэтому я надеюсь, что у вас нет необходимости отвязывать определенные обратные вызовы.
Я сделал jsfiddle, чтобы легко его протестировать: http://jsfiddle.net/SpoBo/cmUmT/2/
edit: http://jsfiddle.net/SpoBo/cmUmT/3/ Используя подчеркиваниеbindAll функционал работает.Я предполагаю, что прокси-сервер делает что-то странное, что мешает функции unbind успешно сравнивать обратные вызовы.
http://jsfiddle.net/SpoBo/cmUmT/7/ Рекомендуется использовать CoffeeScript, хотя для написания Spine и CS имеет собственное решение этой проблемы.Просто используйте «толстые стрелки».Однако, если вы не можете использовать CS, вы можете просто использовать код, который генерирует CS.Я решил это таким образом в версии 7.
По сути, он создает функцию __bind, которая возвращает прокси-функцию из замыкания.После этого вы переопределяете исходную функцию с помощью функции прокси.
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }
someObject.onChange = __bind(someObject.onChange, someObject);
И теперь onChange всегда будет вызываться из контекста someObject.Довольно классная штука!Но проверьте jsFiddle для рабочей демонстрации.