从视图中向集合中添加模型的最佳方法是什么?

What is the best way to add model in a collection from view?

我有一个带有路由器和控制器的 Backbone Marionette 应用程序。在我的应用程序中,您可以查看文本集合(从服务器获取集合的索引路由),可以查看现有的文本集合(不从服务器获取的 indexPage 路由)并且可以创建新文本(表单路由)。列表文本和创建表单的视图彼此不同且区域变化。

我想将成功保存的模型添加到集合中,然后重定向到 indexPage 路由,但是从 _FormView 成功回调中获取文本集合的最佳方法是什么?或者如何重构应用程序以使其变得简单?

我可以使用 Backbone.Radio 将事件发送到控制器,但我想在没有它的情况下进行处理。

路线

router.processAppRoutes(controller, {
    '': 'index',
    'index': 'indexPage',
    'create': 'form'
});

控制器

_Controller = Marionette.Controller.extend({
    initialize: function () {
        this.list = new _MainTexts();
    },
    index: function () {
        if (!_.size(this.list)) {

            var
            self = this;

            this.list.fetch({

                success: function (collection, response, options) {
                    self.indexPage();
                    return;
                }
            });
        }
        this.indexPage();
    },
    indexPage: function () {

        var
        textsView = new _TextsView({
            collection: this.list
        });
        application.getRegion('contentRegion').show(textsView);
    },
    form: function () {

        var
        formView = new _FormView({
            model: new _MainText()
        });
        application.getRegion('contentRegion').show(formView);
    }
});

观看次数

_TextView = Marionette.ItemView.extend({

    className: 'item text',
    template: function (serialized_model) {
        return _.template('<p><%= texts[0].text %></p>')(serialized_model);
    }
});

_TextsView = Marionette.CollectionView.extend({
    className: 'clearfix',
    childView: _TextView
});

窗体视图

_FormView = Marionette.ItemView.extend({
    template: '#form-template',
    ui: {
        text: 'textarea[name="text"]',
        submit: 'button[type="submit"]'
    },
    events: {
        'click @ui.submit': 'submitForm'
    },
    submitForm: function (event) {

        event.preventDefault();
        this.model.set({

            text: this.ui.text.val()
        });

        this.model.save({}, {
            success: function (model, response, options) {

                ???
            }
        });
    }
});

好的,我的问题解决方案就在这里。在控制器操作中 "form" 我创建事件侦听器

var
formView = new _FormView({

    model: model
});

formView.on('formSave', function (model) {

    if (id == null) {

        self.list.add(model);
    }

    ...
});

然后在表单视图中触发事件

this.model.save({}, {

    success: function (model, response, options) {

        if (response.state.success) {

            self.trigger('formSave', model);
        }
    }
});

就这些:)