Backbone Marionette:在扩展对象时,将方法放在实例/构造函数或原型上



我必须从头开始制作一个主干网+提线木偶网络应用程序,这是我从未做过的,我正在为基本的代码结构而挣扎。

我理解在构造函数(为每个实例重新创建)或原型(在实例之间共享)上使用方法的JavaScript概念。

然而,在扩展主干模型和提线木偶视图时,我很难弄清楚这是如何转化为最简单的语法来完成这项工作的。

这篇文章似乎详细解释了我的问题,但他们最终用来扩展视图的语法非常复杂,我决定在Backbone上使用Marionette的原因是为了抽象出这样的结构代码,并利用它们更高级的视图类型:

http://blog.scottlogic.com/2012/12/14/view-inheritance-in-backbone.html

提线木偶"选项"似乎是将属性附加到实例或原型的一种方式,但我不确定如何在示例中使用它们:

http://marionettejs.com/docs/v2.4.5/marionette.functions.html#marionettemergeoptions

因此,假设我想构建一个从Marionette CompositeView扩展而来的CaseView,并具有learnerComplete方法。我希望learnerCompleted方法在我的CaseView原型上使用,因为我不希望为我的600个案例视图实例中的每一个重新创建该方法。然而,我不希望learnerComplete方法出现在Marionette CompositeView原型上,因为我有另一种视图类型CategoryView,它也从Marionette合成器视图扩展而来,但不需要learnerComponed方法。

通过利用内置的Marionette功能来实现这一点,最简单的语法是什么?我认为scottlogic的博客文章提供了一个解决方案,但语法很复杂,我想知道是否有一种更简单的方法可以使用内置的Marionette实用程序来实现这一点。

非常感谢您的帮助!

您可以通过扩展Marionette的CompositeView并指定learnerCompleted函数来实现这一点。

var CaseView = Backbone.Marionette.CompositeView.extend({
learnerCompleted: function() {
/* ... */
}
});
var CategoryView = Backbone.Marionette.CompositeView.extend({
});

如上所述,learnerCompleted函数被放在CaseView原型上,而不是Marionette的CompositeView。因此,没有为您的CategoryView定义learnerCompleted函数。

我制作了一把简单的小提琴:https://jsfiddle.net/jdrap2yk/

最新更新