2016-05-25 4 views
1

Ich muss ein Backbone + Marionette Webapp von Grund auf neu zu machen, was ich noch nie getan habe, und ich habe mit der grundlegenden Code-Struktur zu kämpfen.Backbone Marionette: put Methoden auf Instanz/Konstruktor oder Prototyp beim Erweitern von Objekten

Ich verstehe das JavaScript-Konzept von Methoden für den Konstruktor (für jede Instanz neu erstellt) oder den Prototyp (gemeinsam zwischen Instanzen).

Allerdings habe ich Mühe herauszufinden, wie dies in die einfachste Syntax übersetzt wird, um die Aufgabe zu erfüllen, wenn Backbone-Modelle und Marionettenansichten erweitert werden.

Dieser Beitrag scheint mein Problem im Detail zu erklären, aber die Syntax, mit der sie enden, um Ansichten zu erweitern, ist ziemlich komplex, und der Grund, warum ich beschlossen habe, Marionette auf Backbone zu verwenden, besteht darin, solchen strukturellen Code zu abstrahieren ihre erweiterte Sichttypen:

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

die mariniert ‚Optionen‘ scheinen ein Weg, um Eigenschaften die Instanz oder den Prototyp zu befestigen, aber ich bin nicht sicher, wie sie in einem Beispiel zu verwenden:

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

Also sagen wir, ich möchte eine CaseView erstellen, die von Marionette CompositeView erweitert und hat eine LernerCompleted-Methode. Ich möchte, dass die learnerCompleted-Methode auf meinem CaseView-Prototyp ausgeführt wird, da ich nicht möchte, dass die Methode für jede meiner 600 Instanzen der Fallansicht neu erstellt wird. Ich möchte jedoch nicht, dass die learnerCompleted-Methode auf dem Marionette CompositeView-Prototyp ausgeführt wird, da ich eine andere Ansichtsart CategoryView habe, die ebenfalls von Marionette CompositeView ausgeht, aber die learnerCompleted-Methode nicht benötigt.

Was wäre die einfachste Syntax, um dies zu erreichen, indem die eingebauten Marionette-Funktionen genutzt werden? Ich denke, der Blogeintrag von scottlogic bietet eine Lösung, aber die Syntax ist komplex und ich frage mich, ob es einen einfacheren Weg gibt, das gleiche mit den eingebauten Marionetten-Utilities zu erreichen.

Vielen Dank im Voraus für Ihre Hilfe!

Antwort

0

Sie können dies erreichen, indem Sie Marionettes CompositeView erweitern und die learnerCompleted-Funktion angeben.

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

var CategoryView = Backbone.Marionette.CompositeView.extend({ 
}); 

Mit dem obigen wird die learnerCompleted Funktion auf dem CaseView Prototyp setzen, nicht Marionette des CompositeView. Daher ist die learnerCompleted-Funktion nicht für Ihre CategoryView definiert.

habe ich eine einfache Geige dies zeigt: https://jsfiddle.net/jdrap2yk/

+0

Vielen Dank für Ihre Hilfe! Ich fand auch diesen Artikel über das gleiche Problem, für andere Leute, die meine Frage über Google finden: http://www.erichynds.com/blog/backbone-and-inheritance – MelanieMenard

Verwandte Themen