Ich verfolge dieses Tutorial hier:JointJS Grundverständnis
http://jointjs.com/tutorial/html-elements
Ich habe zwei kleine Fragen:
1) - Was ist das "joint.util.deepSupplement"? was ist seine Aufgabe ?
2) - Wie funktioniert diese benutzerdefinierte Ansicht hier in diesem Code?
// Create a custom view for that element that displays an HTML div above it.
// -------------------------------------------------------------------------
joint.shapes.html.ElementView = joint.dia.ElementView.extend({
template: [
'<div class="html-element">',
'<button class="delete">x</button>',
'<label></label>',
'<span></span>', '<br/>',
'<select><option>--</option><option>one</option><option>two</option></select>',
'<input type="text" value="I\'m HTML input" />',
'</div>'
].join(''),
initialize: function() {
_.bindAll(this, 'updateBox');
joint.dia.ElementView.prototype.initialize.apply(this, arguments);
this.$box = $(_.template(this.template)());
// Prevent paper from handling pointerdown.
this.$box.find('input,select').on('mousedown click', function(evt) { evt.stopPropagation(); });
// This is an example of reacting on the input change and storing the input data in the cell model.
this.$box.find('input').on('change', _.bind(function(evt) {
this.model.set('input', $(evt.target).val());
}, this));
this.$box.find('select').on('change', _.bind(function(evt) {
this.model.set('select', $(evt.target).val());
}, this));
this.$box.find('select').val(this.model.get('select'));
this.$box.find('.delete').on('click', _.bind(this.model.remove, this.model));
// Update the box position whenever the underlying model changes.
this.model.on('change', this.updateBox, this);
// Remove the box when the model gets removed from the graph.
this.model.on('remove', this.removeBox, this);
this.updateBox();
},
render: function() {
joint.dia.ElementView.prototype.render.apply(this, arguments);
this.paper.$el.prepend(this.$box);
this.updateBox();
return this;
},
updateBox: function() {
// Set the position and dimension of the box so that it covers the JointJS element.
var bbox = this.model.getBBox();
// Example of updating the HTML with a data stored in the cell model.
this.$box.find('label').text(this.model.get('label'));
this.$box.find('span').text(this.model.get('select'));
this.$box.css({ width: bbox.width, height: bbox.height, left: bbox.x, top: bbox.y, transform: 'rotate(' + (this.model.get('angle') || 0) + 'deg)' });
},
removeBox: function(evt) {
this.$box.remove();
}
});
Auch frage ich mich, was sind die ersten beiden Zeilen in der Initialisierungsfunktion tun, wo es heißt _.bindAll und in der nächsten Zeile joint.dia.ElementView ....?
Ok, so bitte korrigieren Sie mich ... von dem, was ich gelesen und verstanden habe von dem Link, den Sie teilen d ist das ... joint.util.deepSupplement wird verwendet, um die Art des Objekts zu ändern ... Zum Beispiel in dem Link, den du geteilt hast: wenn es zwei Objekte mit demselben Namen "user" gibt und du dieses "joint.util" benutzt .deepSupplement "dann werden die Werte des zweiten Objekts" age: 36 "dem ersten Objekt" name: barney "zugewiesen ..... okay, aber was ist mit der name-Eigenschaft im zweiten Objekt, die" name: fred "ist .. .was passiert damit. –
Und über bindAll hast du gesagt ...: Das ist lodash Syntax Zucker für den Umgang mit Call-Kontext ("das") .... Syntax Zucker ?? Was für Zucker ist das? ... :-p –
heh ... synactic ... natürlich :) – lades