0

我正在尝试异步加载和渲染其他视图并将它们附加到 ItemView。

简化代码-为什么$el没有在require()块中定义render()-我在这里缺少什么?我没有正确使用 RequireJS,还是 Marionette,或者只是我对 javascript 缺乏经验?

推荐的方法是什么?它需要是动态的,因为在运行时可能会提供其他部分视图,而我还不知道插件已注册。

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 回答
0

您需要将this函数内部绑定到SettingsView对象。就像是:

render: function()
{
     Marionette.ItemView.prototype.render.call(this);
     var $el = this.$el;
     var self = this;
     require(sectionViews, _.bind(function (View)
     {
         ...
     }, this));
     return this;
 }

局部变量在绑定函数内将不可见。this但是,您可以this.$el安全地使用。

于 2013-09-06T12:22:25.583 回答