2013-01-17 12 views
17

uzyskać to twierdzenie podczas uruchamiania kodu poniżej:Ember Uncaught Błąd: twierdzenie nie powiodło się: Opróżnianie widok w stanie inBuffer

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.

Link Demo: http://plnkr.co/edit/s3bUw4JFrJvsL690QUMi

var App = Ember.Application.create({ 
    Store: DS.Store.extend({ 
    revision: 4, 
    adapter: DS.FixtureAdapter.create() 
    }), 

    Router: Ember.Router.extend({ 
    root: Ember.Route.extend({ 
     index: Ember.Route.extend({ 
     route: "/", 
     connectOutlets: function(router){ 
      var person; 
      person = App.Person.find(657); 
      person.addObserver("isLoaded", function() { 
      return router.get('router.applicationController').connectOutlet("things", person.get("things")); 
      }); 
     } 
     }) 
    }) 
    }), 

    ApplicationController: Em.Controller.extend(), 

    ApplicationView: Em.View.extend({ 
    template: Em.Handlebars.compile("{{outlet}}") 
    }), 

    ThingsController: Em.ArrayController.extend({ 
    thingTypes: (function() { 
     return App.ThingType.find(); 
    }).property() 
    }), 

    ThingsView: Em.View.extend({ 
    template: Em.Handlebars.compile([ 
     '{{#each controller.thingTypes}}', 
     '{{this.name}}', 
     '{{/each}}', 
     '{{#each controller.content}}', 
     '{{this.title}}', 
     '{{/each}}'].join("")) 
    }), 

    //MODELS 
    Person: DS.Model.extend({ 
    things: DS.hasMany('App.Thing', { 
     embedded: true 
    }) 
    }), 

    Thing: DS.Model.extend({ 
    description: DS.attr('string'), 
    thingType: DS.belongsTo("App.ThingType", { 
     embedded: true 
    }), 
    title: (function() { 
     return this.get("thingType.name"); 
    }).property("description") 
    }), 

    ThingType: DS.Model.extend({ 
    name: DS.attr("string") 
    }) 
}); 

App.Person.FIXTURES = [ 
    { 
    id: 657, 
    things: [ 
     { 
     id: 1, 
     description: "Some text", 
     thing_type: { 
      id: 1, 
      name: "type 1" 
     } 
     }, { 
     id: 2, 
     description: "Some text", 
     thing_type: { 
      id: 2, 
      name: "type 2" 
     } 
     } 
    ] 
    } 
]; 

App.ThingType.FIXTURES = [ 
    { 
    id: 1, 
    name: "type 1" 
    }, { 
    id: 2, 
    name: "type 2" 
    }, { 
    id: 3, 
    name: "type 3" 
    } 
]; 

Dlaczego to wydarzenie?

+0

To nadal dzieje się w nowym routerze. Nie można przygwoździć problemu :-( – sudhanshu

Odpowiedz

0

trochę późno chyba ... ale mam go do pracy tutaj: http://plnkr.co/edit/hDCT4Qy1h5aE6GjM76qp

nie zmieniła logikę ale gdzie jego nazwie

I zmodyfikowany router tak:

Router: Ember.Router.extend({ 
    root: Ember.Route.extend({ 
     index: Ember.Route.extend({ 
     route: "/", 
     connectOutlets: function(router) { 
      var person; 
      router.set('router.applicationController.currentPerson', App.Person.find(657)); 
     } 
     }) 
    }) 
    }) 

i stworzył ApplicationController:

ApplicationController: Em.Controller.extend({ 
    currentPerson: null, 
    currentPersonLoaded: function() { 
     this.connectOutlet("things", this.get("currentPerson.things")); 
    }.observes("currentPerson.isLoaded"), 
    }) 

Nie wiem, czy to jest wyjście, które chciałeś, ale błąd zniknął!

2

Wystąpił ten sam błąd podczas próby załadowania listy wartości rozwijanych z urządzeń. Co rozwiązany został nadrzędnymi queryFixtures na adapterze urządzenia:

App.FixtureAdapter = DS.FixtureAdapter.extend 
    latency: 200 
    queryFixtures: (records, query, type) -> 
    records.filter (record) -> 
     for key of query 
     continue unless query.hasOwnProperty(key) 
     value = query[key] 
     return false if record[key] isnt value 
     true 

I prawdopodobnie nie zorientowaliśmy się, że nie miał ustawić latency pierwszy. Następnie błąd był nieco bardziej opisowy.