今天一个操作是先要ajax返回列表中的json数据,然后绑定到一个table列表中,table首列是一个checkbox控制器,可以多选多个数据对象,然后返回结果
html代码:
<div class="container">
<div class="row cl">
<div class="col-sm-12">
<table class="table table-bg table-border table-bordered">
<thead>
<tr>
<th></th>
<th>字段名</th>
<th>数据类型</th>
<th>注释</th>
</tr>
</thead>
<tbody data-bind="foreach: list">
<tr>
<td> <input type="checkbox" data-bind="checkedValue:$data, checked: $parent.chosenData" /> </td>
<td data-bind="text:field"></td>
<td data-bind="text:type"></td>
<td data-bind="text:comment"></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row cl mt-5">
<div class="col-sm-1">
<a class="btn btn-success" data-bind="visible:tableViewModel.chosenData().length > 0, click:choosed">选择好了</a>
</div>
</div>
</div>
js代码:
var table_name = '{$table_name}';
var data = [];
var viewModel= function(){
this.addChosen = function(data){
this.chosenData.push(data);
};
this.choosed = function(){
jsonData = ko.toJSON(this.chosenData);
console.log(jsonData);
//closeWin(jsonData);
};
};
viewModel.prototype = {
list : ko.observableArray(data),
chosenData : ko.observableArray(),
};
var tableViewModel = new viewModel();
ko.applyBindings(tableViewModel);
$(function(){
if(table_name !== null && table_name !== undefined && table_name !== '')
{
$.ajax({
type:"post",
data:{
table_name:table_name
},
url:"{:url('home/project/getTableColumns')}",
async:true,
success: function(res){
tableViewModel.list(res);
}
},'json');
}
});
注释:
我先做一个 viewModel的对象,这个对象是一个函数操作类,包括一个addChosen和一个chosed的函数,然后用prototype 属性来向对象添加属性,添加了一个list和choseData的属性,然后给checkbox控件绑定:checkedValue:$data, checked: $parent.chosenData,大致意思是checkbox的值是list中的每一个的对象,当checked的时候,数据绑定到chosenData这个属性,勾上了就添加到这个数组里面,取消勾选的话自动从数组里面去除掉。
今天学会了js的这个prototype属性向对象添加属性的功能。
js新手,写的js代码不咋的,勿喷。学习这个demo使用方法就好。