【问题标题】:How to refresh Footable that is bound with Knockout?如何刷新与 Knockout 绑定的 Footable?
【发布时间】:2013-12-28 00:40:14
【问题描述】:

我创建了一个演示我的问题的 plunk:http://plnkr.co/edit/2UMTW2p0UAWPzJ0d0m5F?p=info

我有一个使用 Knockout.js ForEach 绑定的表。通过在正常位置调用 .footable() 初始化程序不起作用。我为footable 创建了一个自定义活页夹,并将调用$(element).footable();。这会导致 footable 初始化,但因为这发生在自定义活页夹的 init 中,所以在之后添加了更多行,因此表格看起来不正确。我在客户活页夹中有一个更新功能,但我不知道要为 valueAccessor 设置什么,所以它会在正确的时间被调用。 (或根本)理想情况下,我希望它使用用于构建表的相同可观察数组。

我将 afterRender 添加到 ForEach 并帮助了一些,但这需要我在我的 ViewModel 中添加适合的逻辑。

所以,我真正想做的是弄清楚我需要使用什么属性,以便自定义活页夹的更新回调起作用,这样我就可以将所有可脚逻辑封装到自定义活页夹中。

【问题讨论】:

  • +1 以获得良好的解释和 plunkr

标签: knockout.js footable


【解决方案1】:

一种方法是将 foreach 替换为 footable 绑定。 footable 绑定会监听 observableArray 的变化并自动添加 foreach 绑定

ko.bindingHandlers.footable = {
    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        $(element).closest("table").footable();
    },
    update: function(element, valueAccessor) {  
        //this is called when the observableArray changes
        //and after the foreach has rendered the contents       
        ko.unwrap(valueAccessor()); //needed so that update is called
        $(element).closest("table").trigger('footable_redraw');
    }
}

ko.bindingHandlers.footable.preprocess = function(value, name, addBindingCallback) {
    //add foreach binding
    addBindingCallback('foreach', '{ data: ' + value +  '}');
    return value;
}

用法:

<tbody data-bind = "footable: items, delegatedHandler: 'click'" >

查看http://plnkr.co/edit/Gr4DefuWcPAcVBHRyIvJ?p=preview的变化

【讨论】:

  • 这是一个非常好的解决方案,这正是我所需要的!这是其他需要它的人的预处理文档。 (knockoutjs.com/documentation/binding-preprocessing.html)
  • 当我尝试使用任务列表做一个示例时,我在使用此解决方案时遇到了一些障碍,其中每个任务都可以包含一个任务列表。我创建了一个新问题,因为我认为这仍然是大多数情况下的正确解决方案。 stackoverflow.com/q/20849400/2033294
  • 这是正确答案。我遇到的问题是由于Footable重绘,与这个答案无关。如果您对 Footable 很了解,如果您能了解重绘导致问题的原因,我将不胜感激。
  • 不幸的是,我也不知道。 Footable 源代码很长
  • 不用担心。您应该查看stackoverflow.com/a/20893980/2033294。这是对我的另一个问题的回答,并以您在此处的回答为基础。
猜你喜欢
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多