svg - Ember 和 SVG : views not rendered when array controller content changes

标签 svg ember.js

我正在使用 Ember 和 SVG 创建时间轴。下面是我创建的 jsfiddle 的链接(从原始代码简化而来):

http://jsfiddle.net/karlguillotte/UgeFk/

第一次渲染日历和修改属性时都没有问题(请参阅 init 函数)。但是,当我设置事件集合时会出现一些问题(错误:NOT_SUPPORTED_ERR:抛出 DOM 异常 9)。

当然,我可以使用 d3 来渲染这些矩形,但是我想利用 Ember 提供的绑定(bind)机制。该错误可能与 Ember 用来管理绑定(bind)的 script 标签有关。

知道仅使用 Ember 和 SVG 是如何工作的吗?

谢谢

最佳答案

App.eventsController.set('content', [{ start: 50, end: 100 }]);

{ start: 50, end: 100 } !== Em.Object.create({ start: 50, end: 100 });

你的意思是:

App.eventsController.set('content', [Em.Object.create({ start: 50, end: 100 })]);

或者简单地说:

App.eventsController.clear().pushObject(Em.Object.create({ start: 25, end: 100 }));

App.eventsController.set('content', [{ start: 50, end: 100 }]);//will work
//but you cannot use set/get etc on the object later as its a pure js object.

SVG 在大多数方面都比较严格,在大多数地方需要 setAttributeNS,获取所有文本节点,因此很难让模板引擎管理 SVG 内部的内容。

目前的一种解决方法是使用单独定位的 SVG 元素并进行重组,例如:

App.EventView = Ember.View.extend({
    tagName: 'svg',
    templateName: 'event',
    ....
});

<script type="text/x-handlebars" id="event"><g><rect {{bindAttr x="view.x"}} {{bindAttr y="view.y"}} {{bindAttr width="view.width"}} {{bindAttr height="view.height"}}></rect></g></script>

svg.ember-view{position:absolute;top:10px;left:10px;}

http://jsfiddle.net/UgeFk/4/

http://jsfiddle.net/UgeFk/5/

我在一个放弃的项目上做了类似的事情:

{{#each groups}}
  {{#view App.groupView groupBinding="this"}}
    <svg class="migration" height="568" width="1024">
      <g transform="translate(0,0)">
        {{countryMarkers}}
        <path {{bindAttr style="bezierStyle"}} {{bindAttr d="bezierPath"}} class="curve" />
      </g>
    </svg>
  {{/view}}
{{/each}}

我也很想听听是否有更好的解决方案,无需解除绑定(bind)或手动模板化。

关于svg - Ember 和 SVG : views not rendered when array controller content changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485344/

相关文章:

linux - 错误 : EACCES when creating new Ember project

javascript - 在 ember app chrome beta 版本中 - 无法在资源的 'integrity' 属性中找到有效的摘要

没有高度属性的 Safari 上的 SVG 不可见,但问题不可重现?

javascript - 使 svg 元素位于顶部

javascript - D3 js 在快速鼠标单击时出现意外行为

css - SVG 上的颜色叠加作为背景

javascript - 如何将 Store 注入(inject)我的 ember 组件

javascript - 如何计算父路由模型的项目数以在嵌套路由中使用它?

ember.js - 如何使用 ember 辛烷重新加载 ember-data 中的 hasMany 关系?

javascript - 使用 D3 和 TopoJson 显示地点(城市)数据