Выборка модели () не запускает какое-либо событие

Я создал одну магистральную модель под названием «художник» и одно магистральное представление под названием «artistView». Я успешно получил модель, как я мог видеть ее на вкладке сети Chrome devtools.

Однако в тот момент fetch не запускал никаких событий «изменения». Странно то, что он хорошо запустил событие "change" при создании модели, но не при получении этой...

Я мог бы использовать обратный вызов успеха в методе fetch(), но я чувствую, что это не самый правильный способ сделать это. Любая идея ?

Инициализация модели и представления:

var artist = new Artist({id: 3});
var artistView = new ArtistView({model: artist});

Затем я получаю свою модель:

artist.fetch();

В моем магистральном классе View я прослушиваю событие "change", поступающее от модели:

var ArtistView = Backbone.View.extend({

    initialize: function() {
        this.model.on("change", this.test());
    },

    test: function() {
        console.log(this.model.get("name"));
    }
});

Редактировать: событие "синхронизация" также не работает. Когда я создаю модель, она запускает событие синхронизации, но не тогда, когда модель была успешно извлечена.


person JeremyW    schedule 28.05.2013    source источник
comment
Прослушайте событие синхронизации.   -  person Stephen    schedule 29.05.2013
comment
Вы правы, синхронизация была бы более уместной.   -  person L. Sanna    schedule 29.05.2013


Ответы (2)


Вам нужно использовать событие «sync».

  var ArtistView = Backbone.View.extend({

    initialize: function() {
        this.model.on("sync", this.test());

    },

    test: function() {
        console.log(this.model.get("name"));
    }
});

Change срабатывает только при изменении атрибута.

Документы.

Отредактировано, спасибо Стивену.

person L. Sanna    schedule 28.05.2013
comment
Только что проверил, к сожалению, не работает. Метод тестирования вызывается при создании модели, но не при ее успешном извлечении. Сумасшедший... - person JeremyW; 29.05.2013
comment
Это должно исходить от моего прослушивателя событий, поскольку я только что вручную запустил событие синхронизации, и ничего не произошло. - person JeremyW; 29.05.2013
comment
Вот решение: this.model.on(sync, this.test, this); :) - person JeremyW; 29.05.2013

Проблема возникла из моего прослушивателя событий. На самом деле он не принимал во внимание контекст.

Вот решение:

this.model.on("sync", this.test, this);

И не

this.model.on("sync", this.test());
person JeremyW    schedule 29.05.2013