2016-05-25 4 views
1

バックボーン+マリオネットWebアプリケーションをゼロから作成する必要があります。これは基本的なコード構造には苦労しています。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から継承し、learnerCompletedメソッドを持つCaseViewを構築したいとしましょう。 600インスタンスのケースビューのそれぞれに対してメソッドを再作成したくないので、LearnerCompletedメソッドを私のCaseViewプロトタイプにすることをお勧めします。しかし、私は、Marionette CompositeViewから継承しているが、learnerCompletedメソッドは必要ない別のビュータイプのCategoryViewを持っているため、learnerCompletedメソッドがMarionette CompositeViewプロトタイプになることは望ましくありません。

組み込みのマリオネット機能を利用してこれを達成する最も単純な構文は何でしょうか?私はscottlogicのブログ記事が解決策を提供していると思うが、シンタックスは複雑で、組み込みのMarionetteユーティリティを使って同じことを達成する簡単な方法があるかどうかは疑問だ。

ご協力いただきありがとうございます。

答えて

0

これは、MarioetteのCompositeViewを拡張し、learnerCompleted機能を指定することで実現できます。以上により

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

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

learnerCompleted機能はCaseViewプロトタイプ、NOTマリオネットのCompositeViewに置かれています。したがって、あなたのCategoryViewのためにlearnerCompleted関数が定義されていません。 https://jsfiddle.net/jdrap2yk/

+0

はあなたの助けをありがとう:

は、私はこれを示す簡単なフィドルを作成しました!私はまた、同じ問題、他の人々のために私の質問をGoogleで見つけるためにこの記事を見つけた:http://www.erichynds.com/blog/backbone-and-inheritance – MelanieMenard

関連する問題