【问题标题】:Model fetch() not firing any event模型 fetch() 没有触发任何事件
【发布时间】:2013-05-28 20:55:50
【问题描述】:

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

但是,此时 fetch 并未触发任何“更改”事件。 奇怪的是,它在创建模型时很好地触发了一个“更改”事件,但在获取这个模型时却没有......

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

模型和视图初始化:

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

然后我获取我的模型:

artist.fetch();

在我的主干视图类中,我监听来自模型的“更改”事件:

var ArtistView = Backbone.View.extend({

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

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

编辑:“同步”事件也不起作用。当我创建模型时,它会很好地触发“同步”事件,但在成功获取模型时不会。

【问题讨论】:

  • 监听同步事件。
  • 你说得对,同步会更合适。

标签: javascript events backbone.js model fetch


【解决方案1】:

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

  var ArtistView = Backbone.View.extend({

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

    },

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

仅在属性更改时触发更改。

Docs.

编辑感谢斯蒂芬。

【讨论】:

  • 刚刚测试过,很遗憾无法正常工作。测试方法在模型创建时调用,但在成功获取时不调用。疯了……
  • 它应该来自我的事件监听器,因为我刚刚手动触发了一个“同步”事件,但什么也没发生。
  • 这里是解决方案:this.model.on("sync", this.test, this); :)
【解决方案2】:

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

解决办法如下:

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

不是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2014-12-14
    • 1970-01-01
    • 2021-05-13
    • 2018-07-19
    相关资源
    最近更新 更多