我的应用程序使用Fixture数据(稍后会移植到Localstorage),我需要根据用户点击实现'save'方法。用户单击是一个映射到视图的操作,从视图中,它会被传输到控制器,以便将信息保存到模型中,实际上模板具有:
<button {{action 'save' this target='view'}}>Save</button> <!-- note that the 'this' keyword I am sending corresponds to a specific instance of the model that is in a collection, done using an {{#each model}} loop
视图有
actions:{
save:function(card){
// perform some UI activity
this.get('controller').send('save',card); // card representing 'this'
}
}
控制器有:
actions:{
save:function(card){
console.log("controller reached"); // does execute
card.save(); // spits out an error
}
}
一切正常但是card.save()方法调用在控制器中不起作用。我的意思是,我所要做的就是将特定的“卡片”保存到我的数据中,但它一直随地吐痰:
未捕获的TypeError:对象#没有方法'保存'
我在这里缺少什么?
附注:
答案 0 :(得分:2)
看起来好像您没有使用任何客户端记录管理库(例如ember-data或ember-model)。话虽这么说,你的App.Card实例并不是真正的实例,它们只是POJO,并且没有在POJO上定义的保存方法。
听起来你想要对ember数据或ember模型进行一些研究(我建议使用ember数据,http://emberjs.com/guides/models/)
如果您不想使用其中任何一种,您只需使用ajax调用来保存数据:
save:function(card){
console.log("controller reached"); // does execute
// card; // spits out an error
$.ajax({... , data:$(card), ...});
}
如果它是固定装置并且您无意将其保存在任何地方,并且它只是一个干运行,添加一个丑陋的警报或日志
save:function(card){
console.log("controller reached"); // does execute
console.log('pretend to save ' + card);
alert('pretend to save ' + card);
}