Knockout-3.2.0-内部列表<对象>推送问题

Knockout-3.2.0 - Inner list<object> push issue

本文关键字:对象 gt 问题 lt 内部 列表 Knockout-3      更新时间:2023-09-26

我正在为asp应用程序使用knockout.js。我有一个由控制器操作返回到视图的对象列表,此外,列表中的那些对象指向一个对象列表。我无法通过淘汰将新对象添加到内部列表中。到目前为止,我所做的是:

@{
     var initialData = @Html.Raw(new System.Web.Script.Serialization
                                  .JavaScriptSerializer().Serialize(Model));
 }

在视图模型中:

LineItemFields = ko.observableArray(@initialData );

在视图模型中添加函数可以执行以下操作:

 addLineItem = function () {
   ko.utils.arrayForEach(ko.toJS(LineItemFields), function (item) {
     item.LineItemValues.push({"FieldValue": "0", "configseqid": 0, "FieldID": 0,
                               "isVisible": true, "isUpdatable": true });
   });
//LineItemValues is the inner list of each object being iterated.


我尝试调试脚本,它成功地将一个新项推送到正在迭代的对象的内部列表,但不在原始对象中。含义项。LineItemValues是一个副本,而不是LineItemFields[index]。LineItemValue,我还能做些什么,以便将新项推送到可观察数组中?

更新:我的模板绑定和脚本是:

 <tr data-bind="template: {name: 'LineItemDataTemplate', foreach: LineItemFields}"> </tr>
 <script id="LineItemDataTemplate" type="text/html">
        <td data-bind="foreach: $data['LineItemValues']"><input type="text" data-bind="value: FieldValue, enable: $parent.isUpdatable" /></td>
</script>

ko.toJS()将创建observableArray的纯js副本。您需要使用包裹在可观察阵列中的原始阵列:

ko.utils.arrayForEach(LineItemFields(), function (item) {
    item.LineItemValues.push({ "FieldValue": "0", "configseqid": 0, "FieldID": 0,
                               "isVisible": true, "isUpdatable": true });
});