ItemView中未触发无效的模型事件

时间:2013-09-24 11:41:21

标签: javascript backbone.js marionette

我在ItemView中定义了以下事件:

modelEvents: {
            "change": "refresh",
            "invalid": "handleValidation"
        }

我模型中的验证功能是:

validate: function(attrs) {
            if(attrs.Code == "")
                return "Error in Code field";
            else if(attrs.Name == "")
                return "Error in Name field";
        }

问题在于,当我保存模型的实例时,在模型中调用validate函数并成功返回字符串消息,但不会触发ItemView中的无效事件。

由于

2 个答案:

答案 0 :(得分:0)

您应该触发'invalid'事件并将错误meggase作为属性返回。

validate: function(attrs) {
        if(attrs.Code == "")
            this.trigger('invalid', 'Error in Code field');

        else if(attrs.Name == "")
           this.trigger('invalid', 'Error in Name field');
    }

喜欢这个。

答案 1 :(得分:0)

你现在所拥有的应该是有效的。您提供的代码中必须存在一些断开连接。我创建了一个简单的JSFiddle,它可以对您想要的功能进行采样:http://jsfiddle.net/craigjennings11/DZtDm/

var View = Backbone.Marionette.ItemView.extend({
    el: '#content',
    template: _.template('<button>Hello World</button>'),
    events: {
        'click button': 'tryToSave'
    },
    modelEvents: {
        'invalid': 'failedValidation'
    },
    tryToSave: function() {
        this.model.save();
    },
    failedValidation: function(err) {
        this.$el.append('<div>' + err.validationError + '</div>');
    }
});