0

追加のビューを非同期で読み込んでレンダリングし、それらを ItemView に追加しようとしています。

単純化されたコード -のブロックで$el定義されていないのはなぜですか - ここで何が欠けていますか? 私は RequireJS を適切に使用していないのでしょうか、それともマリオネットですか、それとも単に JavaScript の経験が浅いのでしょうか?require()render()

これを行うための推奨される方法は何ですか? 追加のセクション ビューが実行時に利用可能になる可能性があるため、動的である必要がありますが、プラグインによって登録されていることはまだわかりません。

define(['require','marionette', 'App', 'swig', 'backbone.wreqr','text!./settings.html'],
function (require,Marionette, App,Swig, Wreqr,  settingsHtml )
{

    var sectionViews = ['./settingscontent/GeneralView'];

    var SettingsView = Marionette.ItemView.extend(
        {
            template: Swig.compile(settingsHtml),
            commands: new Wreqr.Commands(),
            initialize: function ()
            {
                this.commands.addHandler('save', function (options, callback)
                {
                    callback();
                });
                Marionette.ItemView.prototype.initialize.apply(this, arguments);
            },
            render: function()
            {

                Marionette.ItemView.prototype.render.call(this);
                var $el = this.$el;
                var self = this;
                require(sectionViews, function (View)
                {
                    $el.find('div.tab-content').append(new View(self.model).render().$el);
                // $el is not defined 
                // self != outer this - $el is an empty div 
                });
                return this;

            }
        }
     return SettingsView;
})
4

2 に答える 2

0

itemview.render をオーバーロードしようとしているのはなぜですか?

組み込みの onrender イベントを使用しない理由 https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.itemview.md#render--onrender-event

そのドキュメントから:

Backbone.Marionette.ItemView.extend({
  onRender: function(){
   // manipulate the `el` here. it's already
   // been rendered, and is full of the view's
   // HTML, ready to go.
 }
});

より簡単で、より典型的なマリオネットの使用法のようです

于 2013-03-11T16:14:13.507 に答える