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

时间:2016-05-25 12:07:11

标签: javascript inheritance backbone.js prototype marionette

我必须从头开始制作一个骨干+木偶webapp,这是我从未做过的,而且我正在努力使用基本的代码结构。

我理解在构造函数(为每个实例重新创建)或原型(在实例之间共享)上使用方法的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,并且有一个learnerCompleted方法。我希望learnerCompleted方法继续我的CaseView原型,因为我不希望为我的600个案例视图实例重新创建该方法。但是我不希望mathnerCompleted方法继续使用Marionette CompositeView原型,因为我有另一个视图类型CategoryView,它也从Marionette CompositeView扩展而不需要learnerCompleted方法。

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

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以通过扩展Marionette的JOB 1/option> 并指定CompositeView功能来实现此目的。

learnerCompleted

通过上述内容,var CaseView = Backbone.Marionette.CompositeView.extend({ learnerCompleted: function() { /* ... */ } }); var CategoryView = Backbone.Marionette.CompositeView.extend({ }); 函数放在learnerCompleted原型上,而不是Marionette的CaseView。因此,CompositeView未定义learnerCompleted功能。

我创建了一个简单的小提琴,显示了这个:https://jsfiddle.net/jdrap2yk/