Javascript 控制器中的应用
我已经试了几个小时想弄明白为什么这不起作用,但我似乎找不到解决办法 我试图通过REST获取数据,对数据做一些处理(例如过滤),然后返回结果 如果我只返回Javascript 控制器中的应用,javascript,ember.js,Javascript,Ember.js,我已经试了几个小时想弄明白为什么这不起作用,但我似乎找不到解决办法 我试图通过REST获取数据,对数据做一些处理(例如过滤),然后返回结果 如果我只返回This.store.find('somthing'),这将非常有效。我一使用then(),一切都会中断 App.SongController = Ember.ObjectController.extend({ first: (function() { return this.second(); }).property('fir
This.store.find('somthing')
,这将非常有效。我一使用then()
,一切都会中断
App.SongController = Ember.ObjectController.extend({
first: (function() {
return this.second();
}).property('first', '').volatile()
second: (function() {
var promise = Ember.Deferred.create();
var data = [{ id: 1, name: 'hi' }];
this.store.find('something').then(function (data) {
// Do something with the data..
// return the data
promise.resolve(data);
});
return promise;
}).property('second')
});
控制台中的错误:
Assertion failed: The value that #each loops over must be an Array. You passed <Ember.Deferred:ember350>
Uncaught TypeError: Object [object Object] has no method 'addArrayObserver'
Assertion failed: Emptying a view in the inBuffer state is not allowed and should not happen under normal circumstances. Most likely there is a bug in your application. This may be due to excessive property change notifications.
Uncaught Error: You cannot modify child views while in the inBuffer state
断言失败:每个循环所覆盖的值必须是一个数组。你通过了
未捕获的TypeError:对象[Object Object]没有方法“addArrayObserver”
断言失败:不允许在inBuffer状态下清空视图,并且在正常情况下不应清空视图。您的应用程序很可能存在错误。这可能是由于属性更改通知过多所致。
未捕获错误:处于inBuffer状态时无法修改子视图
听起来你在歌曲模板中使用了一个{{{#each…}},它告诉ember你正在迭代某个数组,但它发现的不是数组
您可以将SongController设置为ArrayController
App.SongController = Ember.ArrayController.extend()
并从模型挂钩返回数据
App.SongRoute = Em.Route.extend({
model: function(){
return this.store.find('something');
},
setupController: function(controller, model){
// and if your need to modify the data, it'll be loaded by this point
model.blah = 123123;
// then let ember finish off setting up the controller
this._super(controller, model);
}
});
如果您真的希望它是一个计算属性,只需从查找中返回承诺,它是一个arrayproxy,解析后将填充它(因此它最初将为0,但一旦服务器响应,它将增长)
我认为在某些路由模型中,您可以返回songController.first()或songController.second(),您可以显示该代码吗?这对我来说不太管用。我尝试获取“categories”,然后循环获取“categories_id”,然后使用这些id构建另一个对“items”表的查询,然后返回并在视图中循环。所以基本上我想返回一个嵌套的
,然后返回语句(find('category')。然后返回(函数(数据){returnfindquery('item',{some:attrs})})
)。你知道怎么做吗?
second: function() {
var promise = this.store.find('something').then(function (records) {
records.objectAt(0).set('someValue', false);
});
return promise;
}.property('second')