我试图用观察者观察XHR后模型的变化.这是因为不再允许扩展fn和调用super的早期方法.
遇到这个奇怪的问题,我的观察者不会发射:
App = Ember.Application.create({
ready: function () {
console.log('Ember Application ready');
this.topCampaignsController = Ember.ArrayController.create({
content: null
});
App.TopCampaignsModel.create({
// Calling super is no longer allowed in object instances
//success: function () {
// this._super();
// App.topCampaignsController.set('content', this.get('data'));
//},
onDataChange: function () {
console.log('data property on the object changed');
App.topCampaignsController.set('content', this.get('data'));
}.observes('data')
});
}
});
App.TopCampaignsModel = Ember.Object.extend({
data: null,
// this will be actually called from an XHR request
success: function () {
this.set('data', [5,10]);
},
init: function () {
console.log('TopCampaignsModel created');
this.success();
console.log(this.get('data'));
}
});
Run Code Online (Sandbox Code Playgroud)
Jsfiddle:http://jsfiddle.net/gdXfN/26/
不确定控制台为什么不记录"对象上的数据属性已更改".如何在我的实例中覆盖"成功"fn,开放替代方法.
在去年12月提交之后,在对象创建期间不再可能设置观察者.这导致了巨大的性能胜利.
要在create上设置观察者,您需要使用:
var Object = Object.createWithMixins({
changed: function() {
}.observes('data')
});
Run Code Online (Sandbox Code Playgroud)
这是一个证明这一点的小提琴.
API文档应该相应更新,稍后我会做.
但是,我不建议您这样做,而是在对象定义期间设置观察者.可以实现相同的结果:http://jsfiddle.net/teddyzeenny/gdXfN/32/
也就是说,你有两件事情与Ember概念背道而驰:
你不应该自己创建控制器实例,你应该让Ember为你创建它们:
App.TopCampaignsController = Em.Controller.extend({ content: null });
Run Code Online (Sandbox Code Playgroud)
当应用程序初始化时,Ember将为您生成控制器.
模型不应该知道控制器的存在.控制器应该访问模型,而不是相反.
模型和控制器将通过路径进行交互.
在最后两点,您可以在http://emberjs.com/guides/上观看教程,了解应用程序,控制器,模型和路由应如何交互.由于您没有使用Ember Data,因此请忽略DS.Model并想象一下Ember.Object.本教程可以很好地概述对象应该如何交互.
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |