I have next model wirt sub array
<!-- ko foreach: {data: userAdminView.viewRoles, as: 'rrole'} -->
<tr>
<td class="userRolesRoleTitle"><b data-bind="text: rrole.role.name"></b><br/><i data-bind="text: rrole.role.description"></i></td>
<td class="userRolesRoleGroups">
<!-- ko foreach: {data: rrole.role.groups, as: 'group'} -->
<div class="usersGroupElement" data-bind="html: group.viewName"></div>
<!-- /ko -->
<a class="btn emb green" data-bind="click: userAdminView.addNewGroup,visible:(rrole.role.isNewGroupAccessible) , attr: { value: rrole }"><i class="icon16 plus"></i>add</a>
</td>
</tr>
<!-- /ko -->
it working well, but from bussines needs I need change dynamictly data in rrole.role.groups sub-array. My code is working and do it, I see that array is changed (added, remove element) in debug mode, but view is updated only if userAdminView.viewRoles array get changes. Why knockoutjs dos't mange it. How I can fix it ?
function userAdminView(user) {
var self = this;
self.viewRoles = ko.observableArray([]);
self.saveNewGroup = function (data, event) {
var datar = self.viewRoles();
$.each(datar, function (index, vrole) {
if (vrole.role.id == self.dialogRole.role.id) {
var line = {
viewName: "<b>" + self.dialogCustomer.name + "</b>",
customer: self.dialogCustomer,
department: self.dialogDepartment,
isEdit: true
};
if (vrole.role.groups == null) {
vrole.role.groups = [];
}
vrole.role.groups.push(line);
}
});
};
}
data structure:
{
role: {
description: role.description,
id: role.id,
name: role.name,
groups: existingGroups,
isNewGroupAccessible: self.canGrant(role, data.d)
}
};
Thanks.