8

チェックボックスがあり、データを更新するためのチェックボックスのイベントをクリックします。チェックボックスをクリックすると、データは更新されますが、チェックボックスがチェックされません。

これは私のhtmlコードです:

<td>
 <input type="checkbox" data-bind="checked: status, disable: status, click: $root.UpdateStatus" />
</td>

これは私のスクリプトです:

self.UpdateStatus = function (tblUsers) {
    $.ajax({
        type: "POST",
        url: 'SinglePageApp.aspx/UpdateStatus',
        data: "{statusVal: 'true',goalId: " + tblUsers.goalId + "}",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            alert(result.d);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus);
            alert(errorThrown);
        }
    });
};

チェックボックスをクリックしたときにチェックボックスをオンにします。その後、チェックボックスをクリックした後に更新されたデータを配置します。

4

4 に答える 4

25

参照: http: //knockoutjs.com/documentation/click-binding.html

注3:デフォルトのクリックアクションを許可するデフォルト
では、Knockoutはクリックイベントがデフォルトのアクションを実行しないようにします。これは、たとえば、タグ(リンク)でクリックバインディングを使用する場合、ブラウザーはハンドラー関数のみを呼び出し、リンクのhrefに移動しないことを意味します。クリックバインディングを使用する場合、通常は、別のWebページへの通常のハイパーリンクとしてではなく、ビューモデルを操作するUIの一部としてリンクを使用しているため、これは便利なデフォルトです。

ただし、デフォルトのクリックアクションを続行させたい場合は、クリックハンドラー関数からtrueを返すだけです


編集:関数のどこに戻るかを示す例を追加trueしました。successAjaxやerrorハンドラーではなく、実際の関数自体から返される必要があります。

self.UpdateStatus = function (tblUsers) {
    $.ajax({
        type: "POST",
        url: 'SinglePageApp.aspx/UpdateStatus',
        data: "{statusVal: 'true',goalId: " + tblUsers.goalId + "}",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            alert(result.d);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus);
            alert(errorThrown);
        }
    });
    // Return true to allow default click action.
    return true;
};
于 2012-10-09T08:59:18.773 に答える
0

status = falseの場合、チェックボックスを無効にしているように見えますが、statusをtrueに設定する唯一の方法は、チェックボックスをオンにすることです。そのため、ノックアウトがクリックされたことを認識していても、チェックボックスがオンになることはありません。

無効になっているため、チェックボックスをオンにすることはできません。そのため、disable: statusデータバインディングを削除するdisableか、チェックボックスの値を実際に変更できるようにロジックをどこかに配置する必要があります。

于 2012-10-09T08:44:54.900 に答える
0

これは、Knockoutのイベントハンドラーのデフォルトの動作が、イベントのデフォルトのアクションを無効にすることであるためです。この場合、clickハンドラーがそれを行います。

click私がお勧めする解決策は、ハンドラーの使用を避け、UpdateStatusステータスのサブスクリプションとして実行することです。ビューモデルコンストラクターで、追加する必要がありますself.status.subscribe(self.UpdateStatus, self);

もう1つの解決策は、ハンドラーから戻ることを含む、ここで説明した解決策です。trueclick

于 2012-10-09T08:51:57.333 に答える
0

私はここでそれを試しました、そしてそれは(値の変化を妨げないで)UpdateStatus戻るときに機能し、明らかに観察可能な値でなければなりません。truestatus

于 2012-10-09T09:00:24.683 に答える