2

Backbone および/または Backbone.Marionette のコンテキストで jquery ダイアログを使用するクリーンな方法を探しています。

ユーザーが [登録] または [ログイン] をクリックしたときに、 MY OTHER WEBSITEにある正確な機能が必要です。 3 つの個別の jQuery ダイアログをメモリにロードし、「開く」と「閉じる」を使用してそれらを操作しました。

現在、Backbone と Marionette を使用して新しいサイトを構築しており、同じ機能を必要としていますが、構造が改善され、スパゲッティ コードが少なくなりました。内部に Marionette.Region を含む 1 つの jQuery ダイアログのみをメモリにロードし、クリックされたリンク (「ログイン」、「登録」、または「パスワードを忘れた」) に応じて、領域内のビューを切り替えるだけだと考えていました。

_Layout.cshtml で:

<div id="dialog">
            <div id="viewContainer"></div>
        </div>

BackboneApp.js で:

App.Regions.ModalRegion = Backbone.Marionette.Region.extend({

    el: '#dialog',
    constructor: function () {
        _.bindAll(this);
        Backbone.Marionette.Region.prototype.constructor.apply(this, arguments);
        this.on("show", this.showModal, this);
    },
    getEl: function (selector) {
        var $el = $(selector);
        return $el;
    },
    showModal: function (view) {
        view.on("close", this.hideModal, this);
        this.$el.dialog(view.dialogOptions);
        this.$el.dialog('open');
    },
    hideModal: function () {
        this.$el.dialog('close');
    }
});


App.Views.LoginView = Backbone.View.extend({
    initialize: function () {
        _.bindAll(this, 'render');
    },
    el: '#viewContainer',
    render: function () {
        $(this.el).load("/Account/Login", function () { });
        return this;
    }
});

var loginOptions = $.extend({}, defaultOptions, {
    title: "Log in",
    buttons: {
        "Log in": function () {
            //LOGIN POST
            Application.modal.close();
        }
    }
});

//Marionette Application
var Application = new Backbone.Marionette.Application();

Application.addRegions({
    modal: App.Regions.ModalRegion
});

Application.addInitializer(function (startOptions) {

    $('#loginLink').live('click', function () {
        var loginView = new App.Views.LoginView();
        Application.modal.show(loginView);
    });

});
Application.start();

私はこれに問題があります:

  1. ビューの render メソッドが 2 回呼び出されます。
  2. ダイアログが初めて読み込まれると、ダイアログが DOM にスローされ、ダイアログを開くアニメーションが実行されます。
  3. その後、ダイアログが読み込まれると、ダイアログのアニメーションがまったく発生しません
  4. Application.modal.close() が hideModal() をトリガーしない
  5. 問題はありませんが、各ビューの特定の dialogOptions をビューにアタッチするにはどうすればよいですか? (showModal で参照)

はい、そこにはかなり多くの問題がありますが、それらが関連していると確信しています。

どんな助けでも大歓迎です。

4

2 に答える 2

2

この記事は少し古いため、古いバージョンのマリオネットを使用しています...しかし、アイデアは有効です: http://lostechies.com/derickbailey/2012/04/17/managing-a-modal-dialog-with-バックボーンとマリオネット/

于 2012-12-14T02:16:45.457 に答える