私は knockoutjs の初心者です。私はjsonデータをkoにマップしようとしていました。これは私のコードです。
json データを解析してテーブルに表示したい。私が ko.compute をしようとしているとき、それは私をスローします self.firstName() は関数ではありません。計算関数の前にコンソールで firstName の値をログに記録しようとすると、json 配列に 3 つの値が出力され、4 回目に実行され、self.firstName が関数ではないというエラーがスローされます。
編集:計算を削除して、jsonのようにデータを印刷するだけで、正しくマップできます。この問題は、計算を使用すると発生します。計算する前に console.log(self.firstName() ) を試してみると、マッピング後に jsonarray に値が出力されますが、3回解析する代わりに、4回と4回解析すると、「関数ではありません」というエラーが表示されます
<div id="employeeList">
<table border ="2">
<thead>
<tr>
<th> First Name</th>
<th> Last Name</th>
<th> Age</th>
<th> Phone</th>
<th> Email</th>
</tr>
</thead>
<tbody data-bind="foreach:employees">
<tr>
<td data-bind="text:name"></td>
<td data-bind="text:firstName"></td>
<td data-bind="text:lastName"></td>
<td data-bind="text:age"></td>
<td data-bind="text:phone"></td>
<td data-bind="text:email"></td>
</tr>
</tbody>
</table>
</div>
これは私のjsコードです
var personMapping={
'copy':['age'],
'employees': {
create: function(options) {
return new PersonViewModel(options.data);
}
}
};
function PersonViewModel(data){
var self=this;
ko.mapping.fromJS(data,personMapping,this);
self.name=ko.computed(function(){
return self.firstName()+' '+self.lastName();
},this);
}
var data={employees:
[{
firstName: 'Marco',
lastName: 'Franssen',
age: 26,
phone: 12346789,
email: "a@a.com"
},
{
firstName: 'Kumar',
lastName: 'Rangarajan',
age: 26,
phone: 123467890,
email: "a@b.com"
},
{
firstName: 'A',
lastName: 'B',
age: 26,
phone: 6775675567567,
email: "a@c.com"}]
}
ko.applyBindings(new PersonViewModel(data), $('#employeeList'));
});
これは jsfiddle コードです: http://jsfiddle.net/YfqPs/1/