我的html中有这个:
<table class="dataTable" id="CADataTable"> <thead> <tr> <th> Type</th> <th> Name</th> <th> Adress</th> <th> ID Number</th> <th> Contact</th> <th> Note</th> </tr> </thead> <tbody> <tr> <td> <select name="CAType" id="CAType" data-bind="value: CAType" style="width: 12em;"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> </select> </td> <!-- <td><input type="text" name="CAType" data-bind="value: CAType" style="width: 9em;"></td> --> <td><input type="text" name="CAName" data-bind="value: CAName" style="width: 15em;"></td> <td><input type="text" name="CAAdress" data-bind="value: CAAdress" style="width: 15em;"></td> <td><input type="text" name="CAIdNum" data-bind="value: CAIdNum" style="width: 6em;"></td> <td><input type="text" name="CAContact" data-bind="value: CAContact" style="width: 10em;"></td> <td><input type="text" name="CANote" data-bind="value: CANote" style="width: 15em;"></td> </tr> </tbody> </table> <button type="button" id="export" class="button" data-bind="click: newCreditRows">Add new row</button>
和一个淘汰js视图模型中的jquery代码,当按下按钮时执行女巫:
var clickAdd = 0; newCreditRows = function(){ clickAdd++; if(clickAdd<=9){ $('#CADataTable tr:last').after('<tr><td><select name="CAType' +clickAdd+ '" id="CAType' +clickAdd+ '" data-bind="value: CAType' +clickAdd+ '" style="width: 12em;"><option>Съдлъжник</option> <option>Поръчител</option> <option>3то Лице</option> <option>ипотекарни / заложни длъжници</option> </select></td><td><input type="text" name="CAName' +clickAdd+ '" data-bind="value: CAName' +clickAdd+ '" style="width: 15em;"></td><td><input type="text" name="CAAdress' +clickAdd+ '" data-bind="value: CAAdress' +clickAdd+ ' " style="width: 15em;"></td><td><input type="text" name="CAIdNum' +clickAdd+ ' " data-bind="value: CAIdNum' +clickAdd+ '" style="width: 6em;"></td><td><input type="text" name="CAContact' +clickAdd+ '" data-bind="value: CAContact' +clickAdd+ ' "style="width: 10em;"></td><td><input type="text" name="CANote' +clickAdd+ '" data-bind="value: CANote' +clickAdd+ '" style="width: 15em;"></td></tr>'); }else alert("Maximum number reached!"); };
一切都工作正常,但我注意到jquery代码添加的新行不能将值绑定到ko.observable()变量(我已经在我的viewmodel中正确声明了所有内容,我不发布它,因为代码将变得庞大.)
我的意思是可观察的CAAdress1女巫在我的代码中声明如下:’“data-bind =”value:CAAdress’ClickAdd无效.
我确信我错过了一些像char逃避的小东西,但我在jquery和淘汰赛中仍然太新,所以我无法发现它.
解决方法
在调用applyBindings方法后,您将dtml注入dom.
所以Ko并不知道新元素.
所以Ko并不知道新元素.
var CA = function() { this.CAName = null; this.CAAdress= null; this.CAIdNum = null; this.CAContact = null; this.CAName = null; this.CANote= null; this.CAType = null; }; var vm = { newCreditRows : function () { this.creditRows.push(new CA()); },creditRows : ko.observableArray() }; ko.applyBindings(vm);
我希望它有所帮助.