javascript - 添加到可观察数组时, knockout 模板不会更新列表

标签 javascript asp.net-mvc knockout.js

我有一个 knockout 模板:

<script type="text/javascript" id="myList">        
  // template stuff here                   
</script>

我用 foreach 选项调用它:

<div data-bind="template: { name:'myList', foreach: ItemList }"></div>

我从我的 Controller 获取 View 模型并使用以下 Javascript 绑定(bind)它:

var viewModel = ko.mapping.fromJS(@Html.Raw(JsonConvert.SerializeObject(Model));                                        
ko.applyBindings(viewModel, document.getElementById("contentsDetails"));

我从我的 Controller 返回了一些项目,一切都很好。

我的问题是,如果我添加到我的可观察数组

var itemToAdd = {
            Name:  ko.observable("name a"),
            Desc:  ko.observable("desc a")
 }

 viewModel.MyObservableArray().push(itemToAdd);

我已经使用以下方法检查了数组是否可观察:

 console.log(ko.isObservable(viewModel.MyObservableArray));

它不会通过将新项目添加到列表来更新 UI 模板。

我在这里做错了什么?

最佳答案

就是这一行:

viewModel.MyObservableArray().push(itemToAdd);

通过在 MyObservableArray 之后放置方括号,您可以访问底层 数组,并将值直接插入其中。 knockout 没有看到这种变化。相反,直接在 observableArray 上调用 .push:

viewModel.MyObservableArray.push(itemToAdd);

这是 knockout 中的一个方法,它将更新底层数组通知任何订阅者更改,并导致 UI 被更新。

或者,您可以保留原样,但通知 knockout 它已更改,这将触发更新:

viewModel.MyObservableArray().push(itemToAdd);
viewModel.MyObservableArray.valueHasMutated();

关于javascript - 添加到可观察数组时, knockout 模板不会更新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30327182/

相关文章:

c# - ASP.NET Web API POST 参数为空

c# - 在 ASP.NET Core 中获取 Controller 详细信息

javascript - js中如何删除数组中的数组元素?

javascript - AngularJS 中的多重自动完成 - PHP (Laravel)

javascript - 如何使用参数为变量的函数?

javascript - 无法使用 jQuery 触发 Knockout 数据绑定(bind)

javascript - KnockoutJS 绑定(bind)到键/值对

javascript - 获取所有 .uploadedFiles 的所有文件

asp.net-mvc - 将用户注册步骤注入(inject) IdentityServer3 SSO 流程

knockout.js - KnockoutJS 选择选项和选择的值