2016-04-27 4 views
1

Я пытаюсь создать проект марионетки с использованием браузера и es6. При создании CollectionView я получаю ошибку Uncaught TypeError: Backbone.ChildViewContainer is not a constructor.Получение Backbone.ChildViewContainer не является конструктором, использующим browserify & es6

Не хватает ли чего-нибудь загрузки? Кажется, ничего не может найти об этом в Интернете.

Вот мой взгляд коллекция:

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); 
    }; 
})); 

Редактировать: Я обнаружил, что мой скомпилированный файл имеет много копий магистрали, так что это может быть проблемой ...

ответ

0

Получил эту же ошибку сегодня утром, когда использовал старый конфигурационный файл JSPM, указывающий на Marionette 2.4.1 и Backbone 1.2.1, и Google связал меня здесь ... Обновление до более поздней версии Marionette 2.4.5 и Backbone 1.3 .2 выпуски, казалось, исправили для меня вещи. Какие версии вы используете?

+0

Я с теми же проблемами, но с использованием машинописи и Webpack - это было нормально, пока я не обновил свои пакеты npm. Насколько я могу судить, я использую Marionette 2.4.5 и Backbone 1.3.3 – user888734

+0

^те версии, которые у меня есть. Я думаю, что это связано с наличием нескольких базовых определений в моем скомпилированном файле, но только один backbone.babysitter –

+0

Знаете ли вы, почему существует несколько базовых определений? – user888734

1

Я столкнулся с этой проблемой с помощью Webpack. Я был в состоянии работать вокруг него, указав псевдоним в webpack.config.js

resolve: { 
    extensions: ['', '.js', '.ts'], 
    alias: { 
     'backbone': 'backbone.marionette/node_modules/backbone' 
    } 
}, 

т.е. убедившись, что все ссылки на позвоночник использовать одну установленные в зависимости от марионеток.

Я никогда не использовал Browserify, но, возможно, вы можете сделать что-то подобное, установив aliasify и добавив в ваш package.json:

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

Wow thanks. У меня немного болит голова! –

+0

Счастливые помочь. Это было с webpack или браузером? – user888734

+0

это было с Webpack. –

 Смежные вопросы

  • Нет связанных вопросов^_^