javascript - Knockout-3.2.0 - 内部列表 <object> 推送问题

标签 javascript c# jquery knockout.js knockout-mvc

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

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

在 View 模型中:

LineItemFields = ko.observableArray(@initialData );

在 View 模型中添加函数执行以下操作:

 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.


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

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

 <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 });
});

关于javascript - Knockout-3.2.0 - 内部列表 <object> 推送问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26059329/

相关文章:

javascript - JSP:提交前确认

c# - NullReferenceException 未处理 - 什么是 null?

javascript - jqgrid创建后如何应用列模板

javascript - this._initializeRegions 不是一个函数?

javascript - Jasmine spyOn mongoose 保存

c# - C#中的延迟执行

c# - 网络网格 : Cannot convert lambda expression to type 'object' because it is not a delegate type

javascript - 如何在href单击和鼠标悬停时播放声音

javascript - 迭代 Handlebars 对象?

对象中的 Javascript 键盘事件