1

私は 2 つの ViewModel を持っています (ただし、'Person' ViewModel をモデルと考えたいと思います):

function Person() {
    var self = this;
    self.firstName = ko.observable("");
    self.lastName = ko.observable("");
}


function AppViewModel() {
    var self = this;
    self.admin = ko.observable(null);
    self.something = ko.observable("Hello World");
}

次に、AppViewModel.admin を Person のインスタンスに設定します。

var viewModel = new AppViewModel();

var bob = new Person();
bob.firstName("Sponge");
bob.lastName("Bob");
viewModel.admin(bob);

ko.applyBindings(viewModel);

次に、次のようにバインドしようとします。

<p><strong data-bind="text: admin.firstName"></strong></p>
<p><strong data-bind="text: admin.lastName"></strong></p>
<p><strong data-bind="text: something"></strong></p>

これの出力は次のようになると予想しました。

スポンジ
ボブ
ハローワールド

ただし、そうではなく、出力は単に「Hello World」
です (明らかに、「何か」は AppViewModel の監視対象であるため、その部分は機能します)。

なぜそれが機能しないのか、代わりに何をすべきかを誰かが説明できますか?

jsFiddle の完全な例: http://fiddle.jshell.net/XRPAH/1/

4

2 に答える 2

2

「admin」はオブザーバブルであるため、含まれている値にアクセスするには「それを呼び出す」必要があります。

<p><strong data-bind="text: admin().firstName"></strong></p>

実際、そうすると

data-bind="text: something"

これは単なる省略形です

data-bind="text: something()"

ただし、オブザーバブルが などの式の一部である場合はadmin.firstName、括弧を明示的に書き留める必要があります。

于 2013-07-17T14:33:54.150 に答える
1

オブジェクトadminは監視可能であるため、次を使用してアクセスする必要があります()

例えば ​​:

<p><strong data-bind="text: admin().firstName"></strong></p>

htmlの最初の行でも同じで、次のようになります

<p><strong data-bind="text: admin().firstName() + ' '+ admin().lastName()"></strong>
</p>

この動作デモを確認してください

于 2013-07-17T14:35:45.203 に答える