emberjs:transitionToRoute错误没有方法'addArrayObserver

时间:2013-08-19 07:16:43

标签: ember.js

来自'工作'路线我正试图过渡到职业生涯'路线使用以下代码。

<script type="text/x-handlebars" data-template-name="job">
    <button {{action 'backToCareers' this}}>Back</button>
</script>

以下控制器提供&#39; 未捕获的TypeError:对象#没有方法&#39; addArrayObserver&#39; &#39;错误。

CareerApp.JobController = Ember.ObjectController.extend({
    backToCareers: function(){
       this.transitionToRoute('careers');
    }
});

如果我更改代码(见下文)以提供模型对象,则错误更改为&#39; 未捕获通过更多上下文对象,而不是路径的动态细分:职业&#39 ;

CareerApp.JobController = Ember.ObjectController.extend({
    backToCareers: function(){
           var jobs = CareerApp.Job.findAll();
       this.transitionToRoute('careers', jobs);
    }
});

以下是我的模型和路由器的代码

CareerApp.Job = Ember.Model.extend({
  refNo: '',
  title: ''
});

CareerApp.Job.reopenClass({
 findAll: function(){
  return $.getJSON("http://site/jobs").then(
     function(response){
        var jobs = Ember.A();
        response.forEach(function(child){
           jobs.pushObject(CareerApp.Job.create(child));
        });
        return jobs;
     }
  );
 }
});

路由器代码

CareerApp.Router.map(function(){
 this.resource('careers', {path: '/'});
 this.resource('job', {path: '/jobs/:job_id'});
});

CareerApp.CareersRoute = Ember.Route.extend({
   model:function(){
       return CareerApp.Job.findAll();
   }
});

CareerApp.CareersController = Ember.ArrayController.extend({
   gradJobCount: function () {
       return this.filterProperty('isExp', false).get('length');
   }.property('@each.isExp')
});

2 个答案:

答案 0 :(得分:2)

模型钩子应该返回一个数组,但是你返回一个jQuery promise对象。 findAll应该返回一个空数组,该数组在执行回调时被填充。

 findAll: function() {
     var jobs = [];

     $.getJSON("http://site/jobs").then(function(response){
         response.forEach(function(child){
             jobs.pushObject(CareerApp.Job.create(child));
         });
    });
    return jobs;
 }

答案 1 :(得分:1)

当您将jobs传递给CarreersController时,此问题必须是ArrayController,也许您必须手动定义