Я пытаюсь запустить образец приложения из учебника для совместной работы, это то, что у меня есть до сих пор.Как я могу использовать 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); это строка, которая выдает ошибку
Из сообщения об ошибке появляется Подчеркивание не загружается на страницу. Кажется, что jointjs использует Underscore для '_.merge (...)' и не находит его. Это приводит к тому, что «сустав» не определяется, поскольку он не прошел инициализацию. Это так просто? –
Код для _.merge (...) является частью Backbone.js, который я не коснулся, и я не уверен, на что он ссылается. – nerfdoit
Для будущих поисковиков Backbone.js действительно зависит от того, что Underscore предоставляется отдельно :. Из документов: «Только жесткая зависимость базовой линии - Underscore.js (> = 1.7.0)». –