Javascript RequireJS未捕获类型错误:无法读取属性';绑定&x27;未定义的

Javascript RequireJS未捕获类型错误:无法读取属性';绑定&x27;未定义的,javascript,jquery,requirejs,Javascript,Jquery,Requirejs,我试图将一个普通的JS转换成AMD来满足需求。虽然在转换时,我经历了标题上所述的错误 这是它发生的脚本 define(['cardExpansionTrianglify'], function(Trianglify) { var demoController = function() { /** * Enum of CSS selectors. */ var SELECTORS = { pattern

我试图将一个普通的JS转换成AMD来满足需求。虽然在转换时,我经历了标题上所述的错误

这是它发生的脚本

define(['cardExpansionTrianglify'], function(Trianglify) {
    var demoController = function() {
        /**
        * Enum of CSS selectors.
        */
        var SELECTORS = {
            pattern: '.pattern',
            card: '.card',
            cardImage: '.card__image',
            cardClose: '.card__btn-close',
        };

        /**
        * Enum of CSS classes.
        */
        var CLASSES = {
            patternHidden: 'pattern--hidden',
            polygon: 'polygon',
            polygonHidden: 'polygon--hidden'
        };

        /**
        * Map of svg paths and points.
        */
        var polygonMap = {
            paths: null,
            points: null
        };

        /**
        * Container of Card instances.
        */
        var layout = {};

        var demoCtrl = {
            init: function() {
                // For options see: https://github.com/qrohlf/Trianglify
                var pattern = Trianglify({
                  width: window.innerWidth,
                  height: window.innerHeight,
                  cell_size: 50,
                  variance: 1,
                  stroke_width: 0.5,
                  x_colors: ['#67001f','#b2182b','#d6604d','#f4a582','#fddbc7','#ffffff','#e0e0e0','#bababa','#878787','#4d4d4d','#000000'],
                  y_colors: ['#67001f','#b2182b','#d6604d','#f4a582','#fddbc7','#ffffff','#e0e0e0','#bababa','#878787','#4d4d4d','#000000']
                  // x_colors : ['rgb(103, 0, 31)','rgb(178, 24, 43)','rgb(214, 96, 77)','rgb(244, 165, 130)','rgb(253, 219, 199)','rgb(255, 255, 255)','rgb(224, 224, 224)','rgb(186, 186, 186)','rgb(135, 135, 135)','rgb(77, 77, 77)','rgb(26, 26, 26)'],
                  // y_colors: ['rgb(103, 0, 31)','rgb(178, 24, 43)','rgb(214, 96, 77)','rgb(244, 165, 130)','rgb(253, 219, 199)','rgb(255, 255, 255)','rgb(224, 224, 224)','rgb(186, 186, 186)','rgb(135, 135, 135)','rgb(77, 77, 77)','rgb(26, 26, 26)']
                }).svg(); // Render as SVG.

                this.mapPolygons(pattern);
                this.bindCards();
            },
            detectPointInCircle: function() {
                var xp = point.x;
                var yp = point.y;

                var xc = center.x;
                var yc = center.y;

                var d = radius * radius;

                var isInside = Math.pow(xp - xc, 2) + Math.pow(yp - yc, 2) <= d;

                return isInside;
            },
            onCardMove: function(track) {
                var radius = track.width / 2;

                var center = {
                    x: track.x,
                    y: track.y
                };

                polygonMap.points.forEach(function(point, i) {
                    if (demoCtrl.detectPointInCircle(point, radius, center)) {
                        $(polygonMap.paths[i]).attr('class', CLASSES.polygon);
                    } else {
                        $(polygonMap.paths[i]).attr('class', CLASSES.polygon + ' ' + CLASSES.polygonHidden);
                    }
                });
            },
            showHideOtherCards: function(id) {
                var TL = new TimelineLite;

                var selectedCard = layout[id].card;

                for (var i in layout) {
                    var card = layout[i].card;

                    // When called with `openCard`.
                    if (card.id !== id && !selectedCard.isOpen) {
                        TL.add(card.hideCard(), 0);
                    }

                    // When called with `closeCard`.
                    if (card.id !== id && selectedCard.isOpen) {
                    TL.add(card.showCard(), 0);
                    }
                }

                return TL;
            },
            playSequence: function(isOpenClick, id, e) {
                var card = layout[id].card;

                // Prevent when card already open and user click on image.
                if (card.isOpen && isOpenClick) return;

                // Create timeline for the whole sequence.
                var sequence = new TimelineLite({paused: true});

                var tweenOtherCards = demoCtrl.showHideOtherCards(id);

                if (!card.isOpen) {
                    // Open sequence.

                    sequence.add(tweenOtherCards);
                    sequence.add(card.openCard(this.onCardMove), 0);

                } else {
                    // Close sequence.

                    var closeCard = card.closeCard();
                    var position = closeCard.duration() * 0.8; // 80% of close card tween.

                    sequence.add(closeCard);
                    sequence.add(tweenOtherCards, position);
                }

                return sequence.play();
            },
            bindCards: function() {
                var elements = $(SELECTORS.card);

                $.each(elements, function(i, card) {
                    var instance = new Card(i, card);

                    layout[i] = {
                        card: instance
                    };

                    var cardImage = $(card).find(SELECTORS.cardImage);
                    var cardClose = $(card).find(SELECTORS.cardClose);

                    $(cardImage).on('click', demoCtrl.playSequence.bind(this, true, i));
                    $(cardClose).on('click', demoCtrl.playSequence.bind(this, false, i));
                });
            },
            mapPolygons: function(pattern) {
                // Append SVG to pattern container.
                $(SELECTORS.pattern).append(pattern);

                // Convert nodelist to array,
                // Used `.childNodes` because IE doesn't support `.children` on SVG.
                polygonMap.paths = [].slice.call(pattern.childNodes);

                polygonMap.points = [];

                polygonMap.paths.forEach(function(polygon) {

                    // Hide polygons by adding CSS classes to each svg path (used attrs because of IE).
                    $(polygon).attr('class', CLASSES.polygon + ' ' + CLASSES.polygonHidden);

                    var rect = polygon.getBoundingClientRect();

                    var point = {
                        x: rect.left + rect.width / 2,
                        y: rect.top + rect.height / 2
                    };

                    polygonMap.points.push(point);
                });

                // All polygons are hidden now, display the pattern container.
                $(SELECTORS.pattern).removeClass(CLASSES.patternHidden);
            }
        }

        demoCtrl.init();
    }

    return demoController;
});
define(['cardExpansionTrianglify'],函数(Trianglify){
var demoController=函数(){
/**
*CSS选择器的枚举。
*/
变量选择器={
模式:'.pattern',
卡片:“.card”,
cardImage:“.card\u image”,
卡片关闭:'.card_ubtn-close',
};
/**
*CSS类的枚举。
*/
变量类={
patternHidden:'模式--隐藏',
多边形:“多边形”,
polygonHidden:“多边形--隐藏”
};
/**
*svg路径和点的地图。
*/
变量polygonMap={
路径:null,
点数:空
};
/**
*卡片实例的容器。
*/
var布局={};
var demoCtrl={
init:function(){
//有关选项,请参见:https://github.com/qrohlf/Trianglify
变量模式=三角形({
宽度:window.innerWidth,
高度:window.innerHeight,
单元格大小:50,
差异:1,
笔画宽度:0.5,
x#U颜色:[#67001f'、#b2182b'、#d6604d'、#f4a582'、#fddbc7'、#ffffff'、#E0E0'、#bababa'、#878787'、#4D4D'、#000000'],
y#U颜色:[#67001f'、#b2182b'、#d6604d'、#f4a582'、#fddbc7'、#FFFF'、#e0e0e0'、#bababa'、#878787'、#4D4D'、#000000']
//x_颜色:['rgb(103,0,31)'、'rgb(178,24,43)'、'rgb(214,96,77)'、'rgb(244,165,130)'、'rgb(253,219,199)'、'rgb(255,255,255)'、'rgb(224,224,224)'、'rgb(186,186)'、'rgb(135,135)'、'rgb(77,77)'、'rgb(26'],
//y_颜色:['rgb(103,0,31)'、'rgb(178,24,43)'、'rgb(214,96,77)'、'rgb(244,165,130)'、'rgb(253,219,199)'、'rgb(255,255,255)'、'rgb(224,224,224)'、'rgb(186,186)'、'rgb(135,135)、'rgb(77,77)'、'rgb(26)]
}).svg();//呈现为svg。
本图为多边形(图案);
这个。bindCards();
},
detectPointInCircle:函数(){
var xp=点x;
var yp=点y;
var xc=中心x;
var yc=中心y;
var d=半径*半径;
var-isInside=Math.pow(xp-xc,2)+Math.pow(yp-yc,2)