6

我正在尝试将 Backbone Validation 与 Backbone Stickit 一起使用,我希望在用户输入它们时一次验证一个属性。但是,当用户输入一个值时,模型上的所有属性都会得到验证,而不仅仅是用户更改的属性。我究竟做错了什么?

我的观点:

bindings:{
        '#username' : {
           observe:'username',
           setOptions: {
                validate:true
           }
        },

        '#email' : {
           observe:'email',
           setOptions: {
                validate:true
           }
        },

        '#firstname' : {
           observe:'firstName',
           setOptions: {
                validate:true
           }
        }, 

.......

onShow: function(){    
        Backbone.Validation.bind(this, {
              valid: function(view, attr) {
                alert('VALID - ' + attr);
              },
              invalid: function(view, attr, error) {
                alert('INVALID - ' + attr);
              }
            });

        this.stickit();

    },
4

4 回答 4

4

在模型(1)setOptions中设置值时会使用您通过的所有内容。当您传递给 Backbone 模型的 set 函数时,它将验证模型中的值以及传递给 set 函数(2)的值,这意味着每次您设置一个导致问题的新值时它都会验证整个模型'现在看到了。你没有做错什么。validate: true

您可以通过将验证拆分为多个单独的函数并在属性更改时仅调用所需的函数然后更改验证函数以调用所有这些单独的函数来验证整个模型来解决此问题。

于 2014-05-11T21:30:03.790 回答
0

这也发生在我身上。就我而言,我将模型中的默认值设置为“”(空白)。删除它们并且它有效

于 2014-06-19T09:07:25.770 回答
0

尝试在您的视图绑定中使用对象上的backbone.validation forceUpdate参数。backbone.stickit setOptions这对我有用,我遇到了类似的问题。

就像 yousefcisco 提到的那样,骨干网将在设置或保存时验证模型中的所有属性,具体取决于您传递的选项,但在我的情况下,我不需要单独验证每个属性,但属性没有设置即使只有一个属性无效,然后我尝试了forceUpdate: true,它发挥了魔力。

在这里检查:http: //thedersen.com/projects/backbone-validation/#configuration/force-update

于 2014-08-21T18:41:38.627 回答
0

为此,您应该从模型中删除默认值(至少对于您验证的属性)值

于 2015-11-23T00:48:19.797 回答