0

私のアプリケーションでは、ajax 応答からのアイテムをknockoutの observableArray に追加したいと考えています。私のHTML:

<select id="mySelect" data-bind="options: MyArray"></select>

だから私は単純なビューモデルを持っています:

var viewModel = { MyArray: ko.observableArray() };

そして私のスクリプトの後に:

$(document).ready(function() {
    ko.applyBindings(viewModel);
    $.ajax({
        url: "MyUrl",
        type: "GET",
        success: function () {
            viewModel.MyArray.push('foo');
        }
    });
});

そして、何も起こりませんでした。このコードを次のように変更した場合:

$(document).ready(function() {
    ko.applyBindings(viewModel);
    viewModel.MyArray.push('foo');
});

すべて正常に動作します。(もちろん、これは簡単な例です)。

どうすればこれを修正できますか?

どんな助けでも大歓迎です。

アップデート:

問題はwijmoだったので、私はいくつかの間違いを犯しました。select を div に変更し、呼び出す必要があります

 $("#mySelect").wijdropdown('refresh');

要素を追加した後。

4

2 に答える 2

0

呼び出しsuccess内のパラメーターを、成功または失敗に関係なく、要求が終了したときに実行するように変更します。以下のコードを使用してリクエストのステータスを調べ、リクエストが機能していない理由を特定します。$.ajaxcomplete

$(document).ready(function() {
    ko.applyBindings(viewModel);
    $.ajax({
        url: "MyUrl",
        type: "GET",
        complete: function (jqXHR, textStatus) {
            viewModel.MyArray.push('foo');

            window.console.log(jqXHR);
            window.console.log(textStatus);
        }
    });
});

更新:これが問題でない場合は、監視可能な配列を次のように初期化してみてください。

MyArray: ko.observableArray([])
于 2013-06-06T18:06:35.623 に答える