Javascript 淘汰ObservalArray不使用多个视图模型更新

Javascript 淘汰ObservalArray不使用多个视图模型更新,javascript,knockout.js,Javascript,Knockout.js,我在一个主视图模型中包含多个视图模型。我正在尝试从viewmodel B向viewmodel A中的数组中插入一个项。在我的日志中,我看到该项被添加到数组中,但它没有更新UI ---HTML <form data-bind="submit: RolesVM.addRole"> <select name="app" data-bind="options:ApplicationsVM.applications,optionsText:'name', value: R

我在一个主视图模型中包含多个视图模型。我正在尝试从viewmodel B向viewmodel A中的数组中插入一个项。在我的日志中,我看到该项被添加到数组中,但它没有更新UI

---HTML

    <form data-bind="submit: RolesVM.addRole">
    <select name="app" data-bind="options:ApplicationsVM.applications,optionsText:'name', value: RolesVM.application"><option></option></select></td>
    <input data-bind='value: RolesVM.role, valueUpdate: "afterkeydown"'/> 
    <button>Add Role</button>
</form>

<ul data-bind="foreach: ApplicationsVM.applications">
    <span data-bind="text:name"></span>
    <ul data-bind="foreach: roles">
        <li data-bind="text:name"></li>
    </ul>
</ul>
您将希望直接调用ObservalArray上的push,而不是底层数组。这是通知任何订阅者它已更改的内容。因此,您希望执行以下操作:

self.application().roles.push(self.role());
而不是:

self.application().roles().push(self.role());
您将希望直接调用ObservalArray上的push,而不是底层数组。这是通知任何订阅者它已更改的内容。因此,您希望执行以下操作:

self.application().roles.push(self.role());
而不是:

self.application().roles().push(self.role());

这会更新我的UI,但无论我键入什么,项目都会作为“结果”返回。啊,我需要将其设置为角色,而不仅仅是名称的字符串值。。var role=新角色self.role;self.application.roles.pushrole;这是一个重要的一点,感谢帮助解决我的问题!我删除了这个问题,它解决了。我像这样使用ko.utils.arrayPushAllarr,itemModels;这会更新我的UI,但无论我键入什么,项目都会作为“结果”返回。啊,我需要将其设置为角色,而不仅仅是名称的字符串值。。var role=新角色self.role;self.application.roles.pushrole;这是一个重要的一点,感谢帮助解决我的问题!我删除了这个问题,它解决了。我像这样使用ko.utils.arrayPushAllarr,itemModels;