我已经开始使用ember cli开发ember JS应用。现在的想法是通过保留点击的坐标来创建svg元素(圆圈)。
我使用了一个视图来捕获鼠标单击,然后将其传递给控制器以创建带有坐标的圆。我正在使用夹具适配器来存储数据。
当我显示它们时,我在代码中手动放置的元素可以正常工作。当我想用控制器存储新节点时,会发生以下问题:
Uncaught TypeError: Cannot read property 'createRecord' of null
这是控制器文件svg.js:
export default Ember.ObjectController.extend({
actions:{
createNode: function(posX,posY){
var element= this.store.createRecord('element',{ //Here is where I get the error
text: "element",
x: posX,
y: posY,
graph: 1
});
element.save();
}
}
});
这是我的模板文件:
{{#view svg}}
{{#each item in model}}//For each graph
{{#each item.elements}}// For each
<circle {{bind-attr cx=x}} {{bind-attr cy=y}} r="5" stroke="black" stroke-width="3" fill="yellow" />
{{/each}}
{{/each}}
{{/view}}
相关路线:
export default Ember.Route.extend({
model: function() {
return this.store.find('graph');
}
});
查看文件:
export default Ember.View.extend({
tagName: "svg",
attributeBindings: ['width','height'],
width: "500",
height: "500",
init: function() {
this._super();
this.set("controller", svg.create());
},
click: function(evt){
var svg= Ember.$("svg:first");
var posX = evt.pageX - svg.position().left;
var posY = evt.pageY - svg.position().top;
this.get('controller').send('createNode',posX,posY);
}
});
也许我做错了什么,但我不知道为什么this.store
会为空。
有任何想法吗 ?
提前致谢!
糟糕,我没有在初始化中看到您在做什么。控制器需要由容器初始化,以便与它们进行依赖注入。依赖注入将存储注入到控制器和路由中。
在2.0中弃用了控制器的情况下,我只想说说将您的操作从控制器移到容纳该视图的路由/控制器中。您还必须将存储传递到视图中。如果您不想这样做,则可以在创建存储时在控制器上手动定义存储。
{{#view svg store=store}}
App.inject('view', 'store', 'store:main');
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句