Javascript 使用Linqjs和Knockout延迟加载

Javascript 使用Linqjs和Knockout延迟加载,javascript,knockout.js,Javascript,Knockout.js,是否可以在敲除数据绑定阶段使用可枚举项? 我只有在第一次执行ToArray时它才能工作,这将消耗可枚举项 您可以编写自己的foreach变量来处理可枚举项 ko.bindingHandlers['foreach2'] = { makeTemplateValueAccessor: function(valueAccessor) { return function() { var bindingValue = ko.utils.unwrapObserv

是否可以在敲除数据绑定阶段使用可枚举项? 我只有在第一次执行ToArray时它才能工作,这将消耗可枚举项


您可以编写自己的foreach变量来处理可枚举项

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);
    }
};


希望这能有所帮助。

您仍在执行ToArray,这将消耗可枚举项,因此这不是真正的懒惰,您仍将在可枚举项上迭代2N次,如果它是真正的懒惰,则会迭代N次