解决 ko mapping 数组无法添加新对象的问题

解决komapping添加对象错误

这两天页面模板化的进程有些放缓,使用 ko mapping 插件的情形多了起来。
组员经常问到的问题即是往 ko mapping 数组添加新对象时,报找不到方法的错误;
而使用 ko.observableArray 创建的数组则可以随意添加或删除对象,这简直奇葩问题。
好吧,不管怎样,总要解决问题的。

// 数组定义
var ViewModelArray = ko.mapping.fromJS([]);
<!--绑定文本-->
<ul data-bind="foreach:$data">
    <li data-bind="text:Name().substr(0,5), attr:{'id':Id}"></li>
</ul>

以上定义完成之后,即可以执行页面加载和绑定了。

$(function () {
    ko.applyBindings(ViewModelArray, ul);
});

完成了 ul 的创建之后,某个事件触发了添加动作,需要根据数据创建新的 li 对象添加到 ul 中,例如:

function Add(){
    var data = { Id: $('#txtId').val(), Name: $('#txtName').val() };
    ViewModelArray.push(data); // 这里可能出现“找不到方法”的错误。
}

进过一番调试发现,由于需要对 Name 属性进行特殊处理,绑定文本中使用 Name() 读取了 Name 的值,而添加方法中的 data 是普通 JS 对象,并不具备 ko 对象的属性方法,因此出现了找不到方法的错误。
解决方法:

1、在后台处理好 Name 属性,前端绑定文本尽量不使用属性方法。

2、将 Add 方法中的 data 处理为 ko 对象再添加。

function Add(){
    var data = { Id: $('#txtId').val(), Name: $('#txtName').val() };
    ViewModelArray.push(ko.mapping.formJS(data));
}

建议采用第二种方式。

 

转载请注明来自飞扬的尘埃的博客。

转载于:https://www.cnblogs.com/i0air/p/4353345.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值