我有这个javascript对象:
title date quantity total
item1 2017-07-12,2017-07-13 100,200 300
item2 2017-07-12 ,2017-07-13 120,320 440
item3 2017-07-12 ,2017-07-13 450,150 600
点击按钮,我在var Email = function (data) {
this.id = ko.observable();
this.clientID = ko.observable(data.clientID);
this.email = ko.observable(data.email);
this.iscc = ko.observable(data.iscc);
}
数组中添加了新的email
:
emails
但我在function addCcEmail () {
var client = self.selectedItem();
var email = new Email({ "id": "1", "clientId": "", "email": "", "iscc": "true" });
console.log(email);
client.emails.push(email);
}
上得到的结果如下:
console.log
我没有正确地发起它吗?
答案 0 :(得分:4)
是的,你正确地做到了。所有属性都显示为函数的事实是因为它们的所有值都是ko.observable
s,它们本身就是函数。
例如,如果选中email.id()
,您将从可观察量中获得所需的值。
答案 1 :(得分:1)
事实上,淘汰观察是一种功能。因此,它记录为function
(而不是实际值)。
只需调用该函数即可检索实际值。假设a = ko.observable(1)
,然后a(); // 1
。
如果你需要从对象创建observable,我可以推荐knockout mapping plugin,这样可以很容易地将对象的每个属性映射到一个observable(反之亦然)。
var Email = function (data) {
this.id = ko.observable();
this.clientID = ko.observable(data.clientID);
this.email = ko.observable(data.email);
this.iscc = ko.observable(data.iscc);
}
let a = new Email({ id: 1, clientID: 2, email: 'foo@xample.com', iscc: false });
console.log(a);
console.log(ko.mapping.toJS(a));
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://cdn.jsdelivr.net/knockout.mapping/2.4.1/knockout.mapping-latest.js"></script>
您也可以通过拨打Email
来替换ko.mapping.fromJS(data)
功能。
我认为这使得挖掘可观察对象的调试对象变得更加容易。