重新渲染ItemView抛出Controller

时间:2015-11-30 18:24:27

标签: javascript backbone.js marionette

我有一个ItemView,然后我将throw .trigger()发送到另一个控制器

消息视图

Bintime.module("Message.Input", function(Input, Bintime, Backbone, Marionette, $, _) {
    Input.Contacts = Marionette.ItemView.extend ({
        template: "#new",
        events: {
            "change input#message-input": "sendInput"
        },
        sendInput: function(e){
            e.preventDefault();
            var message = this.$("input#message-input").val();
            this.model.get("messages").push({
                to: "1",
                message: message
            });
            this.render();
            this.trigger("chat:contacts", this.model);
        }
    });
});

消息控制器

Bintime.module("Message.Input", function(Input, Bintime, Backbone, Marionette, $, _) {
    Input.Controller = {
        messageField: function(model){
            var contacts = new Input.Contacts({
                model: model
            });

            contacts.on("childview:chat:contacts", function(childView, model) {
                Bintime.Contacts.Messages.Controller.chatMessages(model);
            });

            Bintime.regions.input.show(contacts);
        }
    }
});

这是聊天控制器

Bintime.module("Contacts.Messages", function(Messages, Bintime, Backbone, Marionette, $, _) {
    Messages.Controller = {
        chatMessages: function(model){
            var contacts = new Messages.Contact({
                model: model
            });

            Marionette.Renderer.render("#message", model);

            Bintime.regions.messages.show(contacts);
        }
    }
});

一切都是真的,并且应该使用Marionette.Renderer.render("#message", model);

或者我应该使用另一种方法来处理它?<​​/ p>

1 个答案:

答案 0 :(得分:0)

我并非100%确定您使用渲染器做了什么,但有一个问题是您的ItemView不会使用"childview:"将其事件作为前缀,以便绑定应该看起来更像contacts.on("chat:contacts"

也代替Bintime.Contacts.Messages.Controller.chatMessages(model);你可能会抛出另一个模块可以收听的Wreqr / Radio事件..但我认为这里最大的问题是&#34; childview:chat:contacts&#34;不是一个被抛出的事件。