1

我对 ember 有一个大问题。如果我导航到某个地方,Cannot set property 'type' of null有时会出现错误,并且不会呈现视图。错误是在 jQuery 中引发的,而不是在 Ember 中。

我从未something.type在我的应用程序中设置。我不知道错误可能是什么。Route + Controller + View 的示例(不要忘记,它不是每次都发生。)

路由:this.route("channels", {path: "/channels/:only"});

路线:

App.ChannelsRoute = Ember.Route.extend({
  model: function(params) {
    var controller = this.controllerFor("channels");
    controller.set("only", params.only);

    if (!controller.get("hasContent")) {
      return controller.updateContent();
    }
  }
});

控制器:

App.ChannelsController = Ember.ArrayController.extend({

  sortProperties: ["position"],
  sortAscending: true,

  hasContent: function() {
    return this.get("content").length > 0;
  }.property("@each"),

  channels_category: function() {
    return this.get("only");
  }.property("only"),

  filteredContent: function() {
    var filterType = "group";
    var filterID = 1;

    switch(this.get("only")) {
      case "primary": filterType = "group"; filterID = 1; break;
      case "secondary": filterType = "group"; filterID = 2; break;
      case "regional": filterType = "group"; filterID = 3; break;
      case "hd": filterType = "hd"; filterID = true; break;
      default: filterType = "group"; filterID = 1; break;
    }

    return this.filterProperty(filterType, filterID);
  }.property("@each", "only"),

  updateContent: function() {
    return $.getJSON(getAPIUrl("channels.json")).then(function(data){
      var channels = [];
      $.each(data.channels, function() {

        var channel = App.Channel.create({
          id: this.id,
          name: this.name,
          group: this.group,
          hd: this.hd,
          position: this.position,
          recordable: this.recordable
        });
        channels.pushObject(channel);
      });

      return channels;
    });
  }
});

它发生在很多控制器中。我希望有人知道解决方案。

4

2 回答 2

0

你能测试你的 updateContent 函数的这个变体吗?将频道 var 更改为控制器模型...

  updateContent: function() {
    return $.getJSON(getAPIUrl("channels.json")).then(function(data){
      var channels = this.get('model');
      $.each(data.channels, function() {

        var channel = App.Channel.create({
          id: this.id,
          name: this.name,
          group: this.group,
          hd: this.hd,
          position: this.position,
          recordable: this.recordable
        });
        channels.pushObject(channel);
      });
    });
  }
于 2013-10-18T15:37:42.617 回答
0

如果它发生在 jQuery 中,它要么发生在 AJAX 调用中,要么发生在您使用 jQuery 进行的一些 DOM 操作中。最好的开始是调整 AJAX 调用,并检查您正在使用的任何 Handlebars 助手(特别是如果您有任何声明了类型的输入助手)。

于 2013-10-18T19:59:44.373 回答