皆さん。私はKnockout js doc hereを読んでいました。これは子孫バインディングの制御に関連しています。このシナリオでは、applyBindingsToDescendantsを使用して子孫要素を現在のバインディングコンテキストでバインドし、$ data.property_nameを使用して子孫要素のそのバインディングコンテキストのプロパティにアクセスしようとしています。これは、property_nameが既に元のbinding_context、それが後で追加された場合、$ data.property_nameは機能しませんが、$ dataを削除すると動作します。このjsfiddle exampleを見てください。それはなぜそれのように動作するのか誰に教えてもらえますか?
HTML
<div data-bind="addBindingProperties: {addedProp: 'ADDED PROPERTY'}">
<div>Existing property accessible via $data: <span data-bind="text: $data.existingProp"></span></div>
<div>Added property not accessible via $data: <span data-bind="text: $data.addedProp"></span></div>
<div>Added property accessible by removing $data: <span data-bind="text: addedProp"></span></div>
</div>
javascriptの
ko.bindingHandlers.addBindingProperties = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
ko.utils.extend(bindingContext, valueAccessor());
ko.applyBindingsToDescendants(bindingContext, element);
return {controlsDescendantBindings: true};
}
};
ko.applyBindings({
existingProp: 'EXISTING PROPERTY'
});
結果
Existing property accessible via $data: EXISTING PROPERTY
Added property not accessible via $data:
Added property accessible by removing $data: ADDED PROPERTY