2013-02-11 63 views
9

我正在嘗試製作一個應用程序。我有一個計算的屬性和控制器看起來是這樣的:Ember.JS中的動態計算屬性已棄用?

// 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 

現在我下面的教程使用Ember.JS的舊版本。我每天固定的錯誤,但這樣的:

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

什麼是另一種方式來做到這一點?

回答

10

計算屬性僅在對象的create()函數上被棄用。如果你想創建一個計算屬性,那麼你首先必須extend()的對象,然後create()它。

例如:

// 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

哦,我知道了,謝謝。有沒有可能有一個例子使用上面發佈的代碼?此刻,我有點偏離自己的深度。 – andy 2013-02-11 12:31:15

+0

當然,我用代碼更新了我的帖子。 – Deif 2013-02-11 12:35:08

+0

非常感謝一堆! – andy 2013-02-12 09:56:32

2

這似乎也工作正常,如果你做了重新打開:

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

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

這實際上是如果你想在你的'應用程序對象。 – Nico 2014-09-02 15:30:50

相關問題