Повторное отображение вида при изменении свойств

1 dangonfast [2014-04-04 12:32:00]

У меня есть следующее представление, чтобы отображать отмеченную метку всякий раз, когда установлено active свойство:

App.ActiveEntryView = Ember.View.extend({

    render: function(buffer) {
        var active = this.get('active'), icon;
        if (active) {
            icon = 'fa fa-check';
        } else {
            icon = '';
        }
        return buffer.push(icon);
    }

});

Но это не повторное рендеринг, если я изменяю active собственность. Это связано в моем шаблоне следующим образом:

{{#each model}}
    <tr class="odd-even">
        ....
        <td>{{view App.ActiveEntryView activeBinding="parked"}}</td>
        ....
    </tr>
{{/each}}

Где parked - это свойство модели, которую я хочу оценить. Но всякий раз, когда это свойство изменяется в модели, представление не повторно отображается. Я попытался добавить наблюдателя:

App.ActiveEntryView = Ember.View.extend({

    render: function(buffer) {
        var active = this.get('active'), icon;
        if (active) {
            icon = 'fa fa-check';
        } else {
            icon = '';
        }
        return buffer.push(icon);
    }.observes('active')

});

Но затем я получаю сообщение об ошибке:

Uncaught TypeError: undefined is not a function

Ссылаясь на строку:

        return buffer.push(icon);

Я предполагаю, что наблюдатель запускает функцию визуализации, передающую другой параметр, чем buffer.

Как я могу повторно отобразить представление?

ember.js


1 ответ


0 GJK [2014-04-04 15:35:00]

Я не знаю тонны о взглядах, но из того, что я понимаю, это не способ повторной рендеринга. В частности, render - это крюк, вызываемый системой, когда требуется визуализировать шаблон. Вызов самого крючка не заставит систему повторно отобразить шаблон, который должен выполняться на более высоком уровне.

Это, как говорится, вероятно, способ заставить повторную визуализацию всего представления, но это не похоже на хорошее решение для большинства проблем. Я вижу, что вы делаете что-то с иконками, поэтому я собираюсь сделать дикий удар по решению, не зная всей вашей проблемы. Если вы разместите более подробную информацию, я, вероятно, смогу помочь вам больше.

Из того, что я могу сказать, кажется, что вы пытаетесь изменить значок элемента в представлении при изменении active свойства. Вот как вы можете это сделать:

В вашем шаблоне просмотра:

<i {{bind-attr class='view.active:fa view.active:fa-check'}}></i>

Вы можете посмотреть более подробную информацию о связывании имен классов здесь.