0

クリックバインドがfullName関数を呼び出していませんこれを呼び出す正しい方法は何ですか?

<div>
    <div data-bind="with: test.name" >
        <div>
        <span data-bind="text:firstName"></span>
        <span data-bind="text:firstName"></span>
        <br />
        <div>
        <span data-bind="click: $parent.fullName">FullName</span>
    </div>
</div>

modal = function(){
    var firstName = ko.observable('jhon'),
        lastName = ko.observable('deo'),
        test = {
            name : {
              firstName: firstName,
              lastName: lastName
           },
            fullName : function(){
                alert(name.firstName() + name.lastName());
            }
        };

    return {
        test: test
    }
}();

ko.applyBindings(modal);
4

2 に答える 2

1

$ parentメタ属性は、ビューモデルの親オブジェクトではなく、バインディング階層のすぐ上のバインディングを参照します。withはメインのバインディングコンテキストにあるため、$parentはルートビューモデルを参照します。

メニューにアクセスする必要がある場合は、別のバインディング内にネストすることができます。

<div data-bind="with: test">
  <div data-bind="with: name">
  [...]
    <button data-bind="click: $parent.fullName">Click</button>
  </div>
</div>

または、親バインディング(この例ではモーダルバインディングまたはルートバインディング)から開始して呼び出しを修飾します。

<button data-bind="click: $parent.test.fullName">Click</button>

バインディングコンテキストとモデル階層に関する少しの説明:

with :test.nameバインディングを適用すると、元のバインディングで、バインディングコンテキストは次のようになります。

<body> <!-- binding context: [modal] -->
  <div data-bind="with: test.name"> <!-- binding context: [modal|test.name] -->

逆に、上に示したネストされたバインディングを適用すると、階層は次のように変更されます。

<body> <!-- bc: [modal] -->
  <div data-bind="with: test"> <!-- bc: [modal|test] -->
    <div data-bind="with: name"> <!-- bc: [modal|test|name] -->
于 2013-02-15T13:13:31.607 に答える
0

クリックイベントは次のようになります。

<span data-bind="click: $parent.test.fullName">FullName</span>

私はあなたのフィドルを更新しました

于 2013-02-15T13:23:32.427 に答える