8

$.dialog が $el で呼び出される複合ビューを使用しています。

複合ビューは、コレクションの項目を一覧表示します。

今、私はコレクション項目をレンダリングする複数の方法を試しました:ビューにアタッチする前後に複合ビューの外側からフェッチする、ビュー内でフェッチする、サーバースクリプトからコレクションをプリロードするなど...

すべてが機能しているように見えますが、同じ問題が発生します..

複合ビューがこのコレクションを見るとすぐに、独自の初期化関数を再度呼び出します...

コレクションのリセットまたは追加時にレンダリング関数が呼び出されることを完全に理解しています...しかし、初期化??? なぜこれが起こっているのか、私にはまったくわかりません。

showCustomFieldSelect: function(e){

    log('triggered');

    e.preventDefault();

    var cl = new AustApp.Collections.CustomField;

    var select = new AustApp.Views.AvailableCustomFieldsList({
        el: "#available-custom-fields-popup",
        collection: cl
    });

    cl.fetch();


    cl.once("reset", function(){
        // this bind was
        // previously used for creating the view
        // or calling render functions directly
        // amongst numerous efforts to debug

    }, this);


},



MyApp.Views.AvailableCustomFieldsList = function(){

var AvailableCustomFieldsList = Backbone.Marionette.CompositeView.extend({

    template: "#available-contact-list-custom-field-list-js",

    tag: "div",

    itemView: AustApp.Views.AvailableCustomFieldsListItem,

    emptyView: AustApp.Views.EmptyAvailableCustomFieldsListItem,

    itemViewContainer: "ul",

    templateHelpers: viewHelpers,

    initialize: function(){
        log('init called'); // called twice?????
        this.render();
        this.$el.dialog({
            title: "Available Custom Fields",
            width: '600px',
            modal: true,
            dialogClass: "round",
        });
    },
    /* stuff */
});

return AvailableCustomFieldsList;
}();

私が困惑しているので、助けていただければ幸いです

4

5 に答える 5

7

そのため、別の複合ビューにも含まれている複合ビューの後に項目ビューが宣言されている場合に問題を絞り込みました。

ネストされた複合ビューをアイテム ビューに変更すると問題は解決しましたが、ネストされた複合ビューをコレクション ビューに変更すると、コレクションの itemView が利用できないというエラーが発生しました。

そのため、ネストされたビューの宣言をコレクションビューの宣言の上に移動すると、それが修正されました...その後、それを変更すると、宣言が正しい順序であるときにネストされた複合ビューが機能することが判明しました。

複合ビューの二重の初期化は単純に混乱を招くだけなので、誤解を招くことは少ないと思います。可能であれば、未定義の itemview に関するエラーを吐き出す必要があります ^_^

ありがとう

于 2013-02-25T00:28:47.823 に答える
2

上記の説明をありがとう。

私も同じ問題を抱えていました。Composite ビューで定義された itemView がない場合、そのコレクションが変更されるたびに初期化関数が呼び出されます。

アイテム ビューとして空のビューを使用して、これを修正しました。

(私は複合ビューを他の目的で使用していましたが、アイテム ビューは必要ありませんでした。)

于 2013-05-28T07:34:28.517 に答える
1

私は自分の経験を共有しています。それは誰かを助けるかもしれません。

私は同様の問題に直面しました。最初はイベントが 2 回発生したと思っていましたが、実際には 2 回リッスンされ、異常なアプリケーションの動作につながりました。

私のイベントは、複合ビュー (1 つのトリガー) から 1 回発生しましたが、Contact コントローラーの 2 つのインスタンスのために 2 回 (2 オン) リッスンされました。

特定の動作 (私の場合は編集ダイアログを開きます) に対して 1 つのリスナー (1 つの Controller インスタンス) しか持たないようにすることで修正しました。

ノート 。アプリケーションに複数のコントローラーがあり、require を使用して読み込んでいます。

于 2014-01-12T07:16:20.030 に答える