2

次のオブジェクトを定義しています

 function BusinessUnit(id, name, code) {
             this.id = ko.observable(id);
             this.name = ko.observable(name);
             this.code = ko.observable(code);
         }

私のビューモデルでは、次のように定義します

this.selectedEntry = new BusinessUnit("", "", "");

そしてそれはを使用してバインドされます

$('#readID').attr('data-bind', 'text :  selectedEntry.id');

これは私が得るエラーです

バインディングを解析できません。メッセージ:ReferenceError:selectedEntryが定義されていません。バインディング値:テキスト:selectedEntry.id

私も試し$('#readID').attr('data-bind', 'text : $root.selectedEntry.id'); ましたが、同じエラーが発生します。どんなアイデアも役に立ちます

4

1 に答える 1

1

BusinessUnit()自体の周りに親ラッパーモデルをプレフィックスとして付ける必要があるようです。viewmodel変数を参照してから、BusinessUnitとその周辺のプロパティを参照してください。

また、「attr」プロパティを使用してバインドしている理由はありますか。マークアップにバインドしてみませんか?attr呼び出しがバインディングの後にある場合、koがバインディングを「見逃す」可能性があるかどうかはわかりません。そのようです:

function BusinessUnit(id, name, code) {
    this.id = ko.observable(id);
    this.name = ko.observable(name);
    this.code = ko.observable(code);
}

function ViewModel() {
    this.selectedEntry = new BusinessUnit("", "", "");
}

var vm = new ViewModel();
ko.applyBindings(vm); 

バインディングマークアップは次のようになります。

<div id="readID" data-bind="text: vm.selectedEntry.id"></div>

私はこれをテストしていませんが、うまくいけばあなたはアイデアを得るでしょう。

于 2012-06-21T10:59:27.770 に答える