javascript - 使用 Linqjs 和 Knockout 进行延迟加载

标签 javascript knockout.js

是否可以在 knockout 数据绑定(bind)阶段使用 Enumerable? 如果我首先执行 ToArray,我只能让它工作,这将消耗 Enumerable

http://jsfiddle.net/xZmWx/

最佳答案

您可以编写自己的 foreach 变体来使用 Enumerables。

ko.bindingHandlers['foreach2'] = {
    makeTemplateValueAccessor: function(valueAccessor) {
        return function() {
            var bindingValue = ko.utils.unwrapObservable(valueAccessor());

            if (bindingValue instanceof Enumerable) {
                bindingValue = bindingValue.ToArray();
            }

            // If bindingValue is the array, just pass it on its own
            if ((!bindingValue) || typeof bindingValue.length == "number")
                return { 'foreach': bindingValue, 'templateEngine': ko.nativeTemplateEngine.instance };

            // If bindingValue.data is the array, preserve all relevant options
            return {
                'foreach': bindingValue['data'],
                'includeDestroyed': bindingValue['includeDestroyed'],
                'afterAdd': bindingValue['afterAdd'],
                'beforeRemove': bindingValue['beforeRemove'],
                'afterRender': bindingValue['afterRender'],
                'templateEngine': ko.nativeTemplateEngine.instance
            };
        };
    },
    'init': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        return ko.bindingHandlers['template']['init'](element, ko.bindingHandlers['foreach2'].makeTemplateValueAccessor(valueAccessor));
    },
    'update': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        return ko.bindingHandlers['template']['update'](element, ko.bindingHandlers['foreach2'].makeTemplateValueAccessor(valueAccessor), allBindingsAccessor, viewModel, bindingContext);
    }
};

http://jsfiddle.net/madcapnmckay/QeEQg/

希望这有帮助。

关于javascript - 使用 Linqjs 和 Knockout 进行延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10494533/

相关文章:

javascript - 如何在 Ionic 中制作开/关按钮并执行功能?

javascript - [Vue警告] : Error in v-on handler: "TypeError: Cannot read property ' Array' of undefined"

javascript - Bootstrap 4 Accordion 在 Knockout foreach 循环中,展开/折叠问题时更改图标

javascript - () 的 knockout.js 指南

javascript - 为数组中的每个项目计算的 jQuery Knockout 运行

knockout.js - 在 KnockoutJS 中触发 beforeRemove、afterAdd 处理程序

javascript - knockout ajax.beginform 回调

javascript - 将 eval() 限制在一个狭窄的范围内

javascript - Chrome 扩展 onCreatedNavigationTarget Listener 停止工作

javascript - Apollo服务器+ React Apollo pubSub不显示数据