0

要素をマスクするjquery loadmaskアドオンを機能させようとしています(コンテンツをロードするため)。私はノックアウト.jsを使用しています.ビューモデルの外側の要素をマスクすると機能しますが、POSTリクエストの送信時にマスクし、受信時にマスクを解除したい. これから「オブジェクトにメソッドマスクがありません」というエラーが発生します。オブジェクトにアクセスするための設定方法がよくわかりません。

これは機能しますが、私が望むものではありません。コードでマスクを呼び出したい場所に注意しました

<div id = "register_container">
    <div data-bind="visible: register()">
          <div id = "register_form"> <!--this is the div I want to mask -->>
              <button data-bind="click: submitRegistration">Submit</button>
          </div>
     </div>
</div>

function MyViewModel(){

     self.submitRegistration = function(){
           //I want to mask here. When I try it says Object[object object] has no method mask
            $.post....{
                if(data.result == success){
                     // andunmask here
                }
            }
      }
}

$("#register_form").mask("Waiting...");  //the masking works when I place it here, but it's always enabled and I want it inside the viewmodel where I noted so it only works when the POST request is in process

それは素晴らしいことですが、メモしたビューモデル内から何かをマスクしたいと思います。どうすればこれを達成できますか?

4

1 に答える 1

0

問題になる可能性のあることがいくつかあります。

Frist、ifステートメントの比較ではなく代入を行っています。代わりにこれを使用してください:

if(data.result == success){

あるいは

if(data.result === success){

self.submitRegistration(){2 つ目は、通常は次のように見えるコードをよく理解していないという事実です。

var MyViewModel = function () {
    var self = this;

    self.submitRegistration = function() {
    };
};

次に、$.post呼び出しをモックすると、次のように機能します。

var MyViewModel = function () {
    var self = this;

    self.register = ko.observable(true);

    self.submitRegistration = function() {
        $("#register_form").mask("Waiting...");

        // Mock $.post
        window.setTimeout(function () {

            if (1 == 1) {
                // andunmask here
                $("#register_form").unmask();
            }
        }, 3000);
    }
};

ko.applyBindings(new MyViewModel());    

デモについては、このフィドルを参照してください。

Knockout を使用して、探す要素を見つけることもできます。

そのデモについては、この更新されたフィドルを参照してください。

    // Use the "event" parameter to find the element...
    self.submitRegistration = function(data, event) {
        $(event.target).closest('#register_form').mask("Waiting...");

それが役に立てば幸い。

于 2013-08-24T18:00:05.523 に答える