25

私は以下の非常に単純なノックアウトコードを持っています:

var data ={
    "Id" : 1001,
    "SalePrice" : 12345,
    "ListPrice" : 333,
    "ShortDesc" : "Tayler 12345E",
    "Description" : " Long Description"
};


var viewModel={
    dataTest: ko.observable(data)
};


ko.applyBindings(viewModel);

<span data-bind="text: dataTest.SalePrice"></span>

基本的に、データ オブジェクト全体を監視可能なプロパティ dataTest に渡しました。ドット表記で内部オブジェクトのプロパティにアクセスするのは簡単だと思っていたでしょう。しかし、そうではありません。

上記のコードを機能させる方法を教えてください。

4

5 に答える 5

37

これは今では観測可能です (つまり、関数です)。関数を呼び出す必要があります。

<span data-bind="text: dataTest().SalePrice"></span>

一致するように Akshat のフィドルを編集します。

ただし、これが適切な階層をネストするよりも有利である理由はわかりません。OPが求めているのは、かなりアンチパターンです。Akshat がを親オブジェクトとして作成しdataTest、マークアップをドリルダウンする方法を提案しているバインディング コンテキストのページに目を通すことをお勧めします。

于 2013-06-02T04:18:54.567 に答える
3

フィドルをチェックしてください。あなたがする必要があるのはこれだけです

<span data-bind="text: salePrice "></span>

これにより、ビュー モデルで定義された販売価格がスパン要素に取り込まれます。

あなたの質問から、あなたがやろうとしていることは、ビューモデルを html ページのさまざまな要素にバインドすることだと私には思えます。これを実現するidには、apply bindings にパラメーターを渡して、特定のビュー モデルをページの特定のセクションにバインドします。このような

ko.applyBindings(viewmodel,document.getElementById('id')); 

ビュー モデルに直接アクセスする場合は、バインディング コンテキストを使用します。この場合、$dataバインディング コンテキストが必要です。そのため、スパン内のバインディングは次のように変更されます。

<span data-bind="text:$data.salePrice"></span>
于 2013-06-02T03:41:40.867 に答える