Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 控制器中的应用_Javascript_Ember.js - Fatal编程技术网

Javascript 控制器中的应用

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

我已经试了几个小时想弄明白为什么这不起作用,但我似乎找不到解决办法

我试图通过REST获取数据,对数据做一些处理(例如过滤),然后返回结果

如果我只返回
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')