gpt4 book ai didi

ember.js pushObject 不推送

转载 作者:行者123 更新时间:2023-12-04 21:47:37 24 4
gpt4 key购买 nike

让我的大脑围绕着 emberjs。尝试创建一个 Controller ,该 Controller 从返回 JSON 数组的 Web 服务调用加载对象:

(请注意,这是从 coffeescript 生成的 javascript)

MTM.Trade.controller = Ember.ArrayController.create({
loadAll: function() {
var self;
self = this;
this.set('content', []); /* fails with or without this line*/
return $.getJSON('http://localhost:8080/webservice/trades', function(data) {
var jsonTrade, trade, _i, _len;
console.log("Length = " + data.length);
for (_i = 0, _len = data.length; _i < _len; _i++) {
jsonTrade = data[_i];
trade = MTM.Trade.create(jsonTrade);
self.pushObject(trade);
}
console.log("Everything pushed");
});
}
});

调用 MTM.Trade.controller.loadAll() ,很明显每个对象都调用了循环。但是我的 Controller 永远不会改变.. 运行 console.log MTM.Trade.controller.get('content')返回一个空白数组。

我知道 ember-rest 和 ember-data 存在,但现在我正在自己动手学习如何自己做这些事情,稍后将迁移到这些框架。

更新

感谢 this article我确实得到了我的问题的答案。我需要这样初始化我的数组:

MTM.Trade.controller = Ember.ArrayController.create({

init: function() {
this._super();
return this.set('content', Ember.A());
},

loadAll: function() {
...

所以现在我的问题是,为什么?直觉上不应该 ArrayController初始化器处理这个?也许这不是 ArrayController 的方式预计会被使用?

最佳答案

在您更新之前,我发表了一条评论,告诉您在创建时初始化内容(因此在创建的哈希中)。

MTM.Trade.controller = Ember.ArrayController.create({
content: [],
//...
});

但后来我看到你正在设置 content[]在 loadAll 函数中。所以我认为初始化是不必要的。

最接近 ArrayController 时, 它只是 ArrayProxy 的扩展mixin,(即:接口(interface)的种类),所以在创建 ArrayController 的实例时,您必须定义 content属性(property)。

关于ember.js pushObject 不推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11829626/

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