knockout.js - Unable to bind values after inserting table rows with jquery -
i have in 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>   and jquery code inside of knockout js view model, witch executed when button pressed:
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!");                             };   everything working fine, noticed new rows added jquery code can not bind value ko.observable() variables (i have declared correctly in viewmodel, i'm not posting because code become huge.)
i mean observable caadress1 witch declared in code: '" data-bind="value: caadress' +clickadd not working.
i'm sure i'm missing small char escaping, i'm still new in jquery , knockout, i'm not able spot it.
you injecting html dom after called applybindings method. ko not aware of new elements.
take @ this fiddle
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);   i hope helps.
Comments
Post a Comment