Backbone Model获取刷新事件未触发

时间:2011-10-21 23:56:09

标签: javascript backbone.js

我希望我能抽象出所有相关部分。我的问题是,当我从服务器获取模型时,为什么渲染方法没有执行。

模型

var Document = Backbone.Model.extend({
    urlRoot: "/dms/reconcile/GetDocumentByDocumentId/"
});

查看

window.DocumentView = Backbone.View.extend({
    el: $("#reconcile_document"),
    initialize: function () {
        this.model.bind('refresh', this.render) //also tried reset
    },
    render: function () {

        alert("Do awesome stuff here");

        return this;
    }
});

路线

        var AppRouter = Backbone.Router.extend({
            routes: {
                "package/:id": "getPackage"
            },
            getPackage: function (packageid, p) {

                window._document = new Document({ id:packageid) });
                window.document = new DocumentView({ model: _document });

                _document.fetch();
            }
        });

        // Instantiate the router
        var app_router = new AppRouter;

所以当我转到localhost:3000/#/Package/123时,我可以看到xhr调用localhost:3000/dms/reconcile/GetDocumentByDocumentId/123并且数据成功返回,但render函数从未执行。任何帮助将不胜感激。

干杯。

1 个答案:

答案 0 :(得分:8)

在模型上调用fetch()不会触发refresh事件。它会在获取数据后调用change来触发set事件:

http://documentcloud.github.com/backbone/docs/backbone.html#section-40

http://documentcloud.github.com/backbone/#Model-fetch

更改您的事件处理程序,它应该有效:

window.DocumentView = Backbone.View.extend({
    el: $("#reconcile_document"),
    initialize: function () {
        this.model.bind('change', this.render, this);
    },
    render: function () {

        alert("Do awesome stuff here");

        return this;
    }
});