未捕获的TypeError:Object#<object>没有方法'set'</object>

时间:2013-01-24 15:44:36

标签: ember.js

当我尝试将'content'设置为customerList时,我会收到错误:

  

未捕获TypeError:对象#Object没有方法'set'

这是我的代码:

  App.TableController = Em.ArrayController.extend({
init: function() {
    this._super();
    this.getData();
},
getData: function() {
    $.get('data/customer.json', function(data) {
        var customerList = Ember.A([]);
        data.forEach(function(item) {
            var customer = App.overv.create({
                incidient: item.incidient,
                customer: item.customer,
                machine: item.machine,
                priority: item.priority

            });
            customerList.pushObject(customer);
        });
        this.set('content', customerList);

    });
}});

我还尝试使用 App.router.tableController.set('content',customerList),但是ember不再识别控制器。在1.0.0 pre 2中,第二个例子运行得很好。 现在我试着弄清楚我做错了什么或者可能理解错了。

2 个答案:

答案 0 :(得分:1)

在局部变量_self中保留对此的引用。请参阅下面的代码。

App.TableController = Em.ArrayController.extend({
init: function() {
    this._super();
    this.getData();
},
getData: function() {
    var _self = this;
    $.get('data/customer.json', function(data) {
        var customerList = Ember.A([]);
        data.forEach(function(item) {
            var customer = App.overv.create({
                incidient: item.incidient,
                customer: item.customer,
                machine: item.machine,
                priority: item.priority

            });
            customerList.pushObject(customer);
        });
        _self.set('content', customerList);

    });
}});

答案 1 :(得分:1)

可能只是AJAX回调上下文的一个问题......你可以试试这个:

App.TableController = Em.ArrayController.extend({
  init: function() {
      this._super();
      this.getData();
  },
  getData: function() {
      $.ajax({
        url: 'data/customer.json',
        dataType: 'json',
        context: this
      }).success(function(data, textStatus, jqXHR) { 
        var customerList = Ember.A([]);
        data.forEach(function(item) {
            var customer = App.overv.create({
                incidient: item.incidient,
                customer: item.customer,
                machine: item.machine,
                priority: item.priority

            });
            customerList.pushObject(customer);
        });
        this.set('content', customerList);
      });
  }
});

指定TableController作为回调的上下文。