6

Backbone Stickit で Backbone Validation を使用しようとしています。ユーザーが入力した属性を一度に 1 つずつ検証したいと考えています。ただし、ユーザーが値を入力すると、ユーザーが変更した属性だけでなく、モデルのすべての属性が検証されます。私は何を間違っていますか?

私の見解:

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

通過するものsetOptionsはすべて、モデル(1)で値を設定するときに使用されます。バックボーン モデルの set 関数に渡すvalidate: trueと、モデル内の値と set 関数に渡された値が検証されます(2)。つまり、問題を引き起こす新しい値を設定するたびに、モデル全体が検証されます。今見ています。あなたは何も悪いことをしていません。

検証を複数の個別の関数に分割し、属性の変更時に必要な関数のみを呼び出してから、検証関数を変更してそれらの個別の関数をすべて呼び出してモデル全体を検証することで、おそらくこれを解決できます。

于 2014-05-11T21:30:03.790 に答える
0

これを機能させるには、モデルからデフォルト値 (少なくとも検証する属性の) 値を削除する必要があります

于 2015-11-23T00:48:19.797 に答える
0

これは私にも起こりました。私の場合、モデルのデフォルト値を '' (空白) に設定していました。それらを削除し、それは働いた

于 2014-06-19T09:07:25.770 に答える
0

Yout ビュー バインディングでオブジェクトのbackbone.validation forceUpdateパラメーターを使用してみてください。backbone.stickit setOptionsそれは私にとってはうまくいき、私は一種の同様の問題を抱えていました。

yousefciscoが述べたように、バックボーンは、渡されたオプションに応じて、設定または保存時にモデル内のすべての属性を検証しますが、私の場合、各属性を個別に検証する必要はありませんでしたが、無効な属性は 1 つだけforceUpdate: trueでした。

ここで確認してください: http://thedersen.com/projects/backbone-validation/#configuration/force-update

于 2014-08-21T18:41:38.627 に答える