Событие обновления выборки модели магистрали не запускается

#javascript #backbone.js

#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:

Вызов 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;
    }
});
 

Комментарии:

1. Или вы можете вызвать _document . выборка ({успех: _document.success_handler}). И в success_handler вы можете запустить пользовательское событие в своей модели.

2. Я ценю это, Дерик, я полностью упустил это из виду в документе. Но, оказывается, мне также нужно было задать ответ для модели в методе parse в модели документа. Спасибо за вашу помощь.