2013-02-11 9 views
9

Ich versuche eine Ember-Anwendung zu machen. Ich habe eine berechnete Eigenschaft und der Controller sieht wie folgt aus:Dynamisch berechnete Eigenschaften in Ember.JS veraltet?

// The Controller 

Todos.Controller = Ember.Controller.create({ 

    // ** SNIP ** // 

    countCompleted: function() 
    { 
     return this.get('todos').filterProperty('completed', true).length 
    }.property(), 
}); 

// The View 

{{Todos.Controller.countCompleted.property}} Items Left 

Jetzt das Tutorial Ich folge wird mit einer älteren Version von Ember.js. Ich habe jeden Fehler behoben, aber dies:

Uncaught Error: assertion failed: Ember.Object.create no longer supports defining computed properties.

Was ist die Alternative Art und Weise, dies zu tun?

Antwort

10

Die berechnete Eigenschaft ist nur für die create()-Funktion eines Objekts veraltet. Wenn Sie eine berechnete Eigenschaft erstellen möchten, müssen Sie zuerst das Objekt extend() und dann create() es.

Zum Beispiel:

// The Controller 

Todos.TodosController = Ember.Controller.extend({ 

    // ** SNIP ** // 

    countCompleted: function() 
    { 
     return this.get('todos').filterProperty('completed', true).length 
    }.property(), 
}); 

// Note the lower case 't' here. We've made a new object 
Todos.todosController = Todos.TodosController.create(); 

// The View 


// We reference the created object here (note the lower case 't' in 'todosController') 
{{Todos.todosController .countCompleted.property}} Items Left 
+0

Oh ich sehe, danke. Wäre es möglich, ein Beispiel mit dem oben genannten Code zu haben? Ich bin im Moment ein wenig überfordert. – andy

+0

Sicher, ich habe meinen Beitrag mit Code aktualisiert. – Deif

+0

Vielen Dank ein Haufen! – andy

2

Es scheint auch in Ordnung zu arbeiten, wenn Sie wieder öffnen zu tun:

Todos.todosController = Ember.Controller.create({ 
    // ** SNIP ** // 
}); 

Todos.todosController.reopen({ 
    countCompleted: function() { 
     return this.get('todos').filterProperty('completed', true).length 
    }.property(), 
}); 
+1

Dies ist eigentlich der Weg zu gehen, wenn Sie berechnete Eigenschaft auf Ihrem ' Anwendungsobjekt. – Nico

Verwandte Themen