javascript ノックアウトの $parent に問題があります。
私がモデルを持っている場合:
var Person = function () {
var self = this;
self.person_Id = ko.observable();
self.firstName = ko.observable();
self.lastName = ko.observable();
self.age = ko.observable();
self.role = ko.observable();
self.init = function (data) {
self.person_Id(data.person_Id);
self.firstName(data.firstName);
self.lastName(data.lastName);
self.age(data.age);
self.role(data.role);
};
};
そしてコレクション
var PersonCollection = function () {
var self = this;
self.ItemToEditOrToAdd = ko.observable(new Person());
self.persons = ko.observableArray();
self.AddItem = function (item) {
self.persons.push(item);
};
};
そしてhtml
<div id="new" data-bind="with: PersonCollectionInstance.ItemToEditOrToAdd">
<p>Firstname: <input type="text" data-bind="value: firstName"/></p>
<p>Lastname: <input type="text" data-bind="value: lastName"/></p>
<p>Age: <input type="text" data-bind="value: age"/></p>
<p>Role: <input type="text" data-bind="value: role"/></p>
<button data-bind="click: $parent.PersonCollectionInstance.AddItem">Add new</button>
</div>
html を見ると、AddItem にアクセスする自然な方法は次のように書くことです。
<button data-bind="click: $parent.AddItem">Add new</button>
$parent バインディングは、PersonCollectionInstance に戻るのではなく、強力なビュー モデルである AppVM にアクセスするため、これは機能しません。
そのため、次のようにする必要があります。
<button data-bind="click: $parent.PersonCollectionInstance.AddItem">Add new</button>
AddItem がある PersonCollectionInstance ではなく、なぜ $parent が強力なビューモデルに戻るのか、誰か説明してもらえますか?