ember.js - Ember Uncaught Error: assertion failed: Vaciar una vista en el estado inBuffer
ember-data ember-old-router (2)
un poco tarde, supongo ... pero lo tengo para trabajar aquí: http://plnkr.co/edit/hDCT4Qy1h5aE6GjM76qp
No cambió la lógica, pero donde se llama
Modifiqué tu enrutador así:
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));
}
})
})
})
Y creó un ApplicationController:
ApplicationController: Em.Controller.extend({
currentPerson: null,
currentPersonLoaded: function() {
this.connectOutlet("things", this.get("currentPerson.things"));
}.observes("currentPerson.isLoaded"),
})
¡No sé si esta es la salida que deseabas, pero el error desapareció!
Obtengo esta afirmación cuando ejecuto el siguiente código:
Vaciar una vista en el estado inBuffer no está permitido y no debería ocurrir bajo circunstancias normales. Lo más probable es que haya un error en su aplicación. Esto puede deberse a notificaciones de cambio de propiedad excesivas.
Enlace a la demostración: 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"
}
];
¿Por qué está pasando esto?
Estaba teniendo el mismo error al intentar cargar una lista de valores desplegables de los dispositivos. Lo que resolvió fue anular queryFixtures en el adaptador del dispositivo:
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
Probablemente no me habría dado cuenta si no hubiera establecido la latencia primero. Entonces el error fue un poco más descriptivo.