Динамические вычисляемые свойства в 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.

Какой альтернативный способ сделать это?

2 ответа

Решение

Вычисленное свойство не рекомендуется только на 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

Это также, кажется, работает нормально, если вы снова открываете:

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

Todos.todosController.reopen({
    countCompleted: function() {
        return this.get('todos').filterProperty('completed', true).length
    }.property(),
});
Другие вопросы по тегам