0

我有一个使用木偶布局将视图绑定到#content 的页面。

我的应用程序中的登录页面是许多视图一起绘制的,因此我计划使用另一个布局视图而不是复合视图。

但是目前使用下面的代码我得到:

TypeError: object is not a function 

我的 controller.js 基于这样的路由调用视图:

    app.addRegions({
      content: "#content"
    });

define([], function() {
  "use strict";
  return {
    landing: function() {
      return require(["app/views/index"], function(View) {
        return MyApp.content.show(new View());  ////LINE THROWING THE ERROR
      });
    }
  };
});

导致问题的子布局

define([
  "marionette",
  'app/views/images/collection',
  "tpl!app/templates/index.html"
],
  function(Marionette, ImagesView, template) {
        "use strict";
        var AppLayout, layout;
        AppLayout = void 0;
        layout = void 0;
        AppLayout = Backbone.Marionette.Layout.extend({
          template: template(),
          regions: {
            collection1: "#images",
          }
        });
        layout = new AppLayout();
        layout.collection1.show(new ImagesView());
        return layout;
      })

非常感谢任何帮助

4

1 回答 1

1

看起来您正在layout从索引中返回一个新对象,然后尝试将其用作控制器中的函数。

在您的索引中:

layout = new AppLayout();
...
return layout;

然后在你的控制器中:

return MyApp.content.show(new View());

你可能只需要做

return MyApp.content.show(View);

更新 在对此进行了更多处理之后,我们发现了另一个问题。渲染视图的顺序是错误的。该语句layout.collection1.show(new ImagesView());实际上不会渲染任何东西,因为layout它本身还没有被渲染。onRender解决这个问题的方法是将该语句移到AppLayout. 这样,当MyApp.content.show(View)被调用时,它会在正确的时间自动渲染ImagesView

于 2013-09-12T20:16:59.060 回答