Моделът fetch() не задейства никакво събитие

Създадох един основен модел, наречен „artist“ и един основен изглед, наречен „artistView“. Успешно извадих модела, тъй като можех да го видя в мрежовия раздел на Chrome devtools.

Fetch обаче не задейства никакво събитие „промяна“ в този момент. Странното е, че задейства добре събитие „промяна“, когато създаде модела, но не и когато извлече този...

Бих могъл да използвам обратното извикване за успех в метода fetch(), но смятам, че това не е най-правилният начин да го направя. Някаква идея ?

Инициализация на модел и изглед:

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

След това извличам моя модел:

artist.fetch();

В моя backbone 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)


Трябва да използвате събитието „синхронизиране“.

  var ArtistView = Backbone.View.extend({

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

    },

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

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

Документи.

Редактирано благодаря на Стивън.

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