2015-09-29 3 views
0

Я пытаюсь запустить образец приложения из учебника для совместной работы, это то, что у меня есть до сих пор.Как я могу использовать JointJS с Meteor?

1) sampleApp.html

<head> 
    <title>sampleApp</title> 

</head> 

<body> 
    <h1>Welcome to Meteor!</h1> 

    {{> hello}} 
</body> 

<template name="hello"> 
    <div></div> 
</template> 

2) sampleApp.js

if (Meteor.isClient) { 

    Template.hello.onRendered(function() { 

     var graph = new joint.dia.Graph; 

     var paper = new joint.dia.Paper({ 
     el: this.$('div'), 
     width: 600, 
     height: 200, 
     model: graph, 
     gridSize: 1 
     }); 

     var rect = new joint.shapes.basic.Rect({ 
     position: { x: 100, y: 30 }, 
     size: { width: 100, height: 30 }, 
     attrs: { rect: { fill: 'blue' }, text: { text: 'my box', fill: 'white' } } 
     }); 

     var rect2 = rect.clone(); 
     rect2.translate(300); 

     var link = new joint.dia.Link({ 
     source: { id: rect.id }, 
     target: { id: rect2.id } 
     }); 

     graph.addCells([rect, rect2, link]); 
    }); 
} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
    // code to run on server at startup 
    }); 
} 

Когда я запускаю это я получаю следующие ошибки:

Uncaught TypeError: _.merge не functionjoint.dia.Cell.Backbone.Model.extend.constructor @ joint.js: 3831child @ backbone.js: 1408 (анонимная функция) @ joint.js: 7436math @ joint.js: 39 (анонимная функция) @ joint.js : 44 (анонимная функция) @ joint. JS 518ac863e9f6f1f9a755394c59ad7d562c084829: 11194

И

Исключение из Tracker функции последующей промывки: ReferenceError: сустав не определен в [объект Object]. (: 3000/app/client/meteor: /app/client/sampleApp.js: 5)

Я попытался поставить sampleApp.html и sampleApp.js как в корневой каталог проекта, так и в/client joint.js в client/

Кто-нибудь имеет дело с этой проблемой или имеет какое-либо представление о том, как решить эту проблему с ReferenceError?

EDIT: это содержание JointJS, где происходит Uncaught TypeError:

// joint.dia.Cell base model. 
// -------------------------- 

joint.dia.Cell = Backbone.Model.extend({ 

    // This is the same as Backbone.Model with the only difference that is uses _.merge 
    // instead of just _.extend. The reason is that we want to mixin attributes set in upper classes. 
    constructor: function(attributes, options) { 

     var defaults; 
     var attrs = attributes || {}; 
     this.cid = _.uniqueId('c'); 
     this.attributes = {}; 
     if (options && options.collection) this.collection = options.collection; 
     if (options && options.parse) attrs = this.parse(attrs, options) || {}; 
     if (defaults = _.result(this, 'defaults')) { 
      //<custom code> 
      // Replaced the call to _.defaults with _.merge. 
      attrs = _.merge({}, defaults, attrs); 
      //</custom code> 
     } 
     this.set(attrs, options); 
     this.changed = {}; 
     this.initialize.apply(this, arguments); 
    }, 

ATTRS = _.merge ({}, по умолчанию, ATTRS); это строка, которая выдает ошибку

+0

Из сообщения об ошибке появляется Подчеркивание не загружается на страницу. Кажется, что jointjs использует Underscore для '_.merge (...)' и не находит его. Это приводит к тому, что «сустав» не определяется, поскольку он не прошел инициализацию. Это так просто? –

+0

Код для _.merge (...) является частью Backbone.js, который я не коснулся, и я не уверен, на что он ссылается. – nerfdoit

+0

Для будущих поисковиков Backbone.js действительно зависит от того, что Underscore предоставляется отдельно :. Из документов: «Только жесткая зависимость базовой линии - Underscore.js (> = 1.7.0)». –

ответ

0

Оказывается, это была проблема зависимости, я отказался от базовой линии и Lodash через командную строку при установке jointjs-all и исправил проблему.

meteor add mxmxmx:jointjs-all --allow-incompatible-update