0

我正在尝试使用以下代码从“工作”路线过渡到“职业”路线。

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

具有以下内容的控制器给出“未捕获的类型错误:对象 # 没有方法 'addArrayObserver' ”错误。

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

如果我更改代码(见下文)以提供模型对象,则错误更改为“传递的未捕获的上下文对象多于路由的动态段:职业

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')
});
4

2 回答 2

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;
 }
于 2013-08-20T19:55:13.020 回答
1

当您传递jobs给时CarreersController,这需要是一个ArrayController,也许您必须手动定义它

于 2013-08-19T09:39:39.330 回答