9

我正在尝试制作 ember 应用程序。我有一个计算属性,控制器如下所示:

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

有什么替代方法可以做到这一点?

4

2 回答 2

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
于 2013-02-11T12:29:15.400 回答
2

如果您重新打开,它似乎也可以正常工作:

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

Todos.todosController.reopen({
    countCompleted: function() {
        return this.get('todos').filterProperty('completed', true).length
    }.property(),
});
于 2013-04-15T13:52:06.927 回答