0

ここで壁に頭をぶつけて、なぜこれが機能しないのかを理解しようとしています。私は多くの例に従ってみました。

したがって、私のaspxページには次のものがあります。

<input type="radio" data-bind="value: individual" />Individual

これが私のJavaScriptです:

var serviceBase = 'http://localhost:49906/PopulationSelection.aspx/';
var getSvcUrl = function (method) { return serviceBase + method; };

var ajaxGetJson = function (method, jsonIn, callback) {
    $.ajax({
        url: getSvcUrl(method),
        type: "GET",
        data: ko.toJSON(jsonIn),
        dataType: "json",
        contentType: "application/json",
        success: function (json) {
            callback(json.d);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr + ' ' + thrownError);
        }
    });
}

var batchesDataService = {
    getSavedBatches: function (callback) {
        ajaxGetJson("GetBatches", null, callback);
    }
};

var Batch = function (p) {
    this.individual = ko.observable(p.Individual);
    this.household = ko.observable(p.Household);
    this.countOnly = ko.observable(p.CountOnly);
    this.femalePrimary = ko.observable(p.FemalePrimary);
    this.eventManagement = ko.observable(p.EventManagement);
    this.eventManagementText = ko.observable(p.EventManagementText);
    this.randomSampling = ko.observable(p.RandomSampling);
    this.randomSamplingText = ko.observable(p.RandomSamplingText);
    this.stateHasChanged = ko.observable(false);
};

var loadBatchesCallback = function (data) {
    var parsed = JSON.parse(data);
    myViewModel.Batch = new Batch(parsed);
    //also tried:
    //myViewModel.Batch(new Batch(parsed));
};

var myViewModel;
var viewModel = function () {
    this.Batch = ko.observable();
    this.getBatchInfo = function () {
        batchesDataService.getSavedBatches(loadBatchesCallback);
    };
};

$(document).ready(function () {
    myViewModel = new viewModel();
    myViewModel.getBatchInfo();
    ko.applyBindings(myViewModel.Batch);
});

Web メソッド (セッション アクセスに使用) からデータを取得するのに問題はありません。バッチ メンバーに警告すると、正しい情報が表示されます。

私の問題は実際のko.applyBindings(). 何を試しても、コンソールに次のエラーが表示されます。

Uncaught Error: Unable to parse bindings.
Message: ReferenceError: individual is not defined;
Bindings value: value: individual 

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

4

2 に答える 2

2

非同期性。

ajax コールバックが呼び出される前に ko.applyBindings を呼び出しているため、まだ値がありません。

コールバックのどこかで applyBindings を呼び出したい場合があります。

于 2012-11-05T22:30:56.550 に答える
0

まず、あなたが欲しいと思います

ko.applyBindings(myViewModel.Batch);

Batch の使用にも一貫性がありません。1 か所でオブザーバブルとして定義しますが、更新することはありません。クラス定義のみを大文字で開始し、インスタンス/プロパティ変数を小文字で開始するという規則に従うことをお勧めします。これは、どこでどのようなものを使用しているかを明確にするのに役立つ場合があります。

于 2012-11-05T22:24:33.243 に答える