2011-10-25 4 views
2

Я хочу добавить настраиваемый метод для каждого из классов Backbone - model, collection, router, view. Как я могу это сделать?backbone.js: как добавить настраиваемый метод для каждого базового класса

Вот что я делаю до сих пор ....

Backbone.Router.prototype.method1 = function() { 
    console.log("I came here: router"); 
}; 
Backbone.View.prototype.method1 = function() { 
    console.log("I came here: view"); 
}; 
Backbone.Model.prototype.method1 = function() { 
    console.log("I came here: model"); 
}; 
Backbone.Collection.prototype.method1 = function() { 
    console.log("I came here: collection"); 
}; 

Я предполагаю, что должно быть лучше и более элегантный способ сделать это?

Update

Вот как я реализовал это в конце концов. Спасибо за совет о регистрации @dira

http://jsfiddle.net/fsFNW/

ответ

6

Строго ответить на вопрос, проверить http://jsfiddle.net/dira/bbnSE/

window.debug_factory = function(kind) { 
    return function(message) { 
     console.log("I came here: " + kind + " " + " " + message); 
    } 
}; 

Backbone.Model.prototype.debug  = window.debug_factory('model'); 
Backbone.Collection.prototype.debug = window.debug_factory('collection'); 

Course = Backbone.Model.extend({}); 
Courses = Backbone.Collection.extend({model: Course}); 

c1 = new Course({name: 'c1'}); 
courses = new Courses(); 
courses.add(c1); 

c1.debug('a'); 
courses.debug('b'); 
c1.debug('c'); 

Если вы используете это для отладки, я рекомендую иметь функцию window.debug и использование более значимых сообщений («выборка», «рендеринг» и т. д.), поскольку «я пришел сюда: модель» не очень полезен.

Смежные вопросы