gpt4 book ai didi

ember.js - 观察者不触发创建的对象

转载 作者:行者123 更新时间:2023-12-02 05:58:10 26 4
gpt4 key购买 nike

我正在尝试使用观察器来观察 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'));
}
});

Jsfiddle 在这里:http://jsfiddle.net/gdXfN/26/

不确定为什么控制台不记录“对象上的数据属性已更改”。对如何在我的实例中覆盖“成功”fn 的替代方法持开放态度。

最佳答案

this commit 之后去年 12 月,不再可以在创建对象时设置观察者。这带来了巨大的性能提升。

要在创建时设置观察者,您需要使用:

var Object = Object.createWithMixins({
changed: function() {
}.observes('data')
});

这是一个 fiddle证明这一点。

API 文档应该相应地更新,我稍后会做一些事情。

不过,我不建议你那样做,而是在对象定义时设置观察者。可以获得相同的结果:http://jsfiddle.net/teddyzeenny/gdXfN/32/

也就是说,您正在做的两件事违反了 Ember 的概念:

  1. 您不应该自己创建 Controller 实例,您应该让 Ember 为您创建它们:

    App.TopCampaignsController = Em.Controller.extend({ content: null });

    当应用程序初始化时,Ember 会为您生成 Controller 。

  2. 模型不应该知道 Controller 的存在。 Controller 应该访问模型,而不是相反。

    模型和 Controller 将通过路由一起交互。

最后两点可以看教程http://emberjs.com/guides/查看应用程序、 Controller 、模型和路由应该如何交互。因为你没有使用Ember 数据,忽略 DS.Model 并想象一个 Ember.Object。本教程可以很好地概述对象应如何交互。

关于ember.js - 观察者不触发创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com