0

大家好,我正在从事一个项目,我必须集成敲除和数据表,并且我必须使用它们实现 CRUD 操作......我使用了从这个源下载的敲除数据表.js https://github.com/CogShift /Knockout.Extensions 我的应用程序工作正常,但是在执行行级删除 /edit..... 时,它类似于这个示例 acshttp://jsfiddle.net/ducka/haq2y/

行级事件(例如删除)只会工作一次......接下来如果我必须让它工作我必须排序或使用分页我不明白为什么会这样......有人可以帮助我吗

谢谢 :)

4

2 回答 2

0

一旦执行删除,这可能是错误地重新绑定视图的问题。如果您的数据或视图在删除后重新绑定,请确保您没有用新的 observables 覆盖原始 observables。例如,如果您的模型具有定义为的属性:

self.myData = ko.observableArray([initialData]);

并且您从 AJAX 获取新数据,请确保您没有这样做

self.myData = ko.observableArray([newData]);

相反,您想这样做

self.myData([newData]);

如果您的原始帖子中没有更多信息,恐怕这只是一个猜测。

要对此进行更深入的讨论,请在此处的博客文章中查看“重置视图模型的正确方法”:http ://ryanrahlf.com/getting-started-with-knockout-js-3-things-第一天就知道/

于 2013-06-12T13:11:14.547 回答
0

使用为数据表设计的自定义绑定 -->

ko.bindingHandlers.dataTablesForEach = {
page: 0,
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
  var options = ko.unwrap(valueAccessor());
  ko.unwrap(options.data);
  if(options.dataTableOptions.paging){
    valueAccessor().data.subscribe(function (changes) {
        var table = $(element).closest('table').DataTable();
        ko.bindingHandlers.dataTablesForEach.page = table.page();
        table.destroy();
    }, null, 'arrayChange');          
  }
    var nodes = Array.prototype.slice.call(element.childNodes, 0);
    ko.utils.arrayForEach(nodes, function (node) {
        if (node && node.nodeType !== 1) {
            node.parentNode.removeChild(node);  
        }
    });
    return ko.bindingHandlers.foreach.init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
},
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {        
    var options = ko.unwrap(valueAccessor()),
        key = 'DataTablesForEach_Initialized';
    ko.unwrap(options.data);
    var table;
    if(!options.dataTableOptions.paging){
      table = $(element).closest('table').DataTable();
        table.destroy();
    }
    ko.bindingHandlers.foreach.update(element, valueAccessor, allBindings, viewModel, bindingContext);
    table = $(element).closest('table').DataTable(options.dataTableOptions);
    if (options.dataTableOptions.paging) {
       if (table.page.info().pages - ko.bindingHandlers.dataTablesForEach.page == 0) 
           table.page(--ko.bindingHandlers.dataTablesForEach.page).draw(false);                
       else 
           table.page(ko.bindingHandlers.dataTablesForEach.page).draw(false);                
    }        
    if (!ko.utils.domData.get(element, key) && (options.data || options.length))
        ko.utils.domData.set(element, key, true);
    return { controlsDescendantBindings: true };
}}; 

JSFIDDLE

于 2015-12-11T20:30:24.070 回答