При инициализации представления магистрали - PullRequest
3 голосов
/ 25 декабря 2011

Как мне сделать так, чтобы функция запускалась каждый раз, когда инициализируется представление backbone.js?

Я ищу что-то, что я могу надеть вне моего нормального кода представления, как расширениеto backbone.js.

Идея состоит в том, чтобы уменьшить количество шаблонов.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 25 декабря 2011

Поскольку Javascript не является истинным объектно-ориентированным языком программирования, вы не можете использовать наследование для решения своей проблемы, как если бы это был java или c #.

Одним из возможных решений является использование шаблона проектирования фабрики.

Вместо непосредственного создания экземпляра вашего представления, вы можете вызвать фабричный метод, который будет создавать экземпляр вашего представления.

var viewFactory = function(view, viewOptions) {
  //perform your boilerplate code
  return new view(viewOptions);
}

AView = Backbone.View.extend({});

var person = new Backbone.Model({name: 'Paul'});
var view = viewFactory(AView, { model: person });

Вот пример jsfiddle

Это не такое элегантное решение, которое возможно с другими языками, но оно выполняет свою работу.

3 голосов
/ 25 декабря 2011

используйте встроенную функцию инициализации backbone.js:

http://documentcloud.github.com/backbone/#View-constructor

var ItemView = Backbone.View.extend({
  initialize: function(){
    alert('View Initialized');
  }
});

РЕДАКТИРОВАТЬ: Я должен быть более ясным.

По словам найденного здесь Патрика Юинга http://podcast.rubyonrails.org/programs/1/episodes/railsconf-2007:

"if it walks like a duck and talks like a duck, it’s a duck, right? So if this duck is not giving you the noise that you want, you’ve got to just punch that duck until it returns what you expect"

Duck Punch (или Monkey Patch, если вы предпочитаете) объект Backbone.

Backbone.View.prototype.initialize = function(){
  alert('I overrode the default initialize function!');
}
1 голос
/ 25 декабря 2011

Вы можете использовать Backbone.Events.

На верхнем уровне вашего приложения или на глобальном объекте:

app.eventManager = {};
_.extend(app.eventManager, Backbone.Events);
app.eventManager.bind("newView", app.yourfunction(view));

И в методе инициализации любого представления вы хотите запустить свою функцию:

app.eventManager.trigger("newView", this);

где "this" - это экземпляр представления, переданный в качестве параметра "view" вашей функции.

...