JointJS / Rappid更改检查员/细胞模型值,无需使用检查员

时间:2015-12-22 08:52:25

标签: javascript angularjs jointjs rappid

所以我试图在不使用检查器的情况下更新单元模型中文本属性(名称)的值,我需要更新检查器字段和链接单元模型值。不知道怎么做。有可能吗?

1 个答案:

答案 0 :(得分:2)

从你的问题中确切地说出你的意思有点困难,而且我没有Rappid许可证所以我无法测试UI Inspector部分:o(但假设我理解你的话) ...

...如果您使用属性扩展形状的原型,则可以像往常一样在Angular中对其进行数据绑定,并在更改属性时自动更新形状。

猜测这也会更新检查员细胞,但我无法测试,因为我没有像我说的那样拥有Rappid许可证。

因此,如果您将名称属性添加到这样的形状:

  Object.defineProperty(joint.shapes.basic.Rect.prototype, 'name', {
      get: function () { return this.attr('text/text'); },
      set: function (value) { this.attr('text/text', value); }
  });

您可以在控制器范围上公开要编辑的元素并将其绑定到它。 HTML:

<div ng-app>
  <div ng-controller="MyCtrl">
    <div id="paper"/>
    <div>
      <label>Type here:</label>
      <input type="text" ng-model="element.name"  />
    </div>
  </div>
</div>

控制器:

function MyCtrl($scope) {

  var graph = new joint.dia.Graph;
  var paper = new joint.dia.Paper({
      el: $('#paper'),
      width: 400,
      height: 400,
      model: graph,
      gridSize: 1,
      interactive: false
  });

  var element = new joint.shapes.basic.Rect({
      position: {x:100, y:30},
      attrs: {text: {text: 'edit my name'}},
      size: { height: 92.7051, width: 150}
  });

  $scope.element = element;

  graph.addCell(element);

  Object.defineProperty(joint.shapes.basic.Rect.prototype, 'name', {
      get: function () { return this.attr('text/text'); },
      set: function (value) { this.attr('text/text', value); }
  });

}

在这里工作jsfiddle:http://jsfiddle.net/r7n9t9s6/3/