初始化 Backbone.js 视图时

kxxlusnw  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(158)

如何使函数在每次初始化backbone.js视图时运行?
我正在寻找一些我可以放在我的普通视图代码之外的东西,作为backbone.js的扩展。
这样做的目的是减少样板文件的数量。

klh5stk1

klh5stk11#

由于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 example
这不是一个优雅的解决方案,在其他语言中也是可能的,但它确实完成了这项工作。

4szc88ey

4szc88ey2#

使用内置的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"
鸭子打孔(或猴子面片,如果您喜欢)脊椎对象。

Backbone.View.prototype.initialize = function(){
  alert('I overrode the default initialize function!');
}
brvekthn

brvekthn3#

您可以使用Backbone.Events。
在应用程序的顶层或全局对象上:

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

在任何视图的initialize方法中,您都希望触发函数:

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

其中“this”是作为“view”参数传递给函数的视图示例。

相关问题