模型fetch()不触发任何事件

时间:2013-05-28 20:55:51

标签: javascript events backbone.js model fetch

我创建了一个名为“artist”的骨干模型和一个名为“artistView”的骨干视图。我成功地获取了模型,因为我可以在Chrome devtools网络标签中看到它。

然而,fetch当时没有触发任何“更改”事件。 奇怪的是,它在创建模型时很好地解决了“更改”事件,但是在获取此模型时没有... ...

我可以在fetch()方法中使用成功回调,但我觉得这不是最合适的方法。有什么想法吗?

型号&查看初始化:

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

然后我获取了我的模型:

artist.fetch();

在我的主干View类中,我会听取来自模型的“更改”事件:

var ArtistView = Backbone.View.extend({

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

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

编辑:“同步”事件也无效。当我创建模型时,它会很好地激活“同步”事件,但在成功获取模型时则不会。

2 个答案:

答案 0 :(得分:3)

您需要使用“同步”事件。

  var ArtistView = Backbone.View.extend({

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

    },

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

仅在属性更改时更改。

Docs

编辑thx to stephen。

答案 1 :(得分:0)

问题来自我的事件监听器。它实际上没有考虑上下文。

以下是解决方案:

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

而不是

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