获取Backbone.ChildViewContainer不是使用browserify&amp ;;的构造函数。 ES6

时间:2016-04-27 02:52:37

标签: backbone.js ecmascript-6 marionette

我正在尝试使用browserify和es6设置木偶项目。创建CollectionView时,我收到错误Uncaught TypeError: Backbone.ChildViewContainer is not a constructor

我错过了加载的东西吗?似乎无法在互联网上找到任何相关信息。

这是我的收藏视图:

import {ItemView, CollectionView} from 'backbone.marionette';
import navTemplate from '../templates/navigation.hbs';
import navItemTemplate from '../templates/_navItem.hbs';

var NavigationItem = ItemView.extend({
    template: navItemTemplate
});

var NavigationView = CollectionView.extend({
    template: navTemplate,

    childView: NavigationItem,

    childViewContainer: '.left-navigation',
});

export default NavigationView;

和我创建它的布局

import {LayoutView} from 'backbone.marionette';
import layoutTemplate from './templates/layout.hbs';

import NavigationView from './Views/navigation';

export default class AppLayout extends LayoutView {
  constructor(options) {
    super(options);

    this.template = layoutTemplate;
  }

    regions() { 
        return {
            'navigation': '.left-aside'
        };
    }

    onRender() {
        console.log(this.getRegion('navigation'));
        this.getRegion('navigation').show(new NavigationView());
    }
}

我也使用垫片来使用backbone.radio,但这不应该影响这个:

(function(root, factory) {
  if (typeof define === 'function' && define.amd) {
    define(['backbone.marionette', 'backbone.radio', 'underscore'], factory);
  } else if (typeof exports !== 'undefined') {
    module.exports = factory(require('backbone.marionette'), require('backbone.radio'), require('underscore'));
  } else {
    factory(root.Backbone.Marionette, root.Backbone.Radio, root._);
  }
}(this, function(Marionette, Radio, _) {
  'use strict';

  Marionette.Application.prototype._initChannel = function () {
    this.channelName = _.result(this, 'channelName') || 'global';
    this.channel = _.result(this, 'channel') || Radio.channel(this.channelName);
  };
}));

编辑:我发现我的编译文件有很多主干副本,所以可能是问题......

2 个答案:

答案 0 :(得分:2)

我遇到了Webpack这个问题。我能够通过在webpack.config.js

中指定别名来解决它
resolve: {
    extensions: ['', '.js', '.ts'],
    alias: {
        'backbone': 'backbone.marionette/node_modules/backbone'
    }
},

即。确保所有对骨干的引用都使用作为Marionette的依赖项安装的那个。

我从未使用过Browserify,但也许你可以通过安装aliasify并将其添加到你的package.json来做类似的事情:

{
"aliasify": {
    "aliases": {
        "backbone": "backbone.marionette/node_modules/backbone"
    }
}

答案 1 :(得分:0)

今天早上使用指向Marionette 2.4.1和Backbone 1.2.1的旧JSPM配置文件时出现同样的错误,谷歌将我链接到这里......更新到最近的Marionette 2.4.5和Backbone 1.3。 2个版本似乎为我解决了问题。你在运行什么版本?