From fb3c1c1108fb81c7de490dc0a4ad8443a27dc6c2 Mon Sep 17 00:00:00 2001 From: Kevin Malakoff Date: Sat, 6 Apr 2013 15:00:21 -0700 Subject: [PATCH] Upgrade knockback --- examples/pnp-nt-i_xui_pth_kb.html | 2 +- examples/pnp-t-e_jq_kb.html | 2 +- examples/pnp-t-i_jq_kb.html | 2 +- examples/pnp-t_jq_kb.html | 2 +- examples/pnp-t_zpt_kb.html | 2 +- examples/pns-e_jq_kb.html | 2 +- examples/pns-i_zpt_kb.html | 2 +- examples/pns_jq_kb.html | 2 +- examples/pns_zpt_kb.html | 2 +- ...17.0.js => knockback-core-stack-0.17.1.js} | 142 +++++++++++------- package.json | 2 +- .../test-amd.coffee | 2 +- .../test-latest.html | 2 +- .../test-amd.coffee | 2 +- .../test-latest.html | 2 +- test/knockback-pane-navigator/test-amd.coffee | 2 +- .../knockback-pane-navigator/test-latest.html | 2 +- ...17.0.js => knockback-core-stack-0.17.1.js} | 142 +++++++++++------- ...ore-0.17.0.js => knockback-core-0.17.1.js} | 140 +++++++++++------ 19 files changed, 288 insertions(+), 168 deletions(-) rename examples/vendor/{knockback-core-stack-0.17.0.js => knockback-core-stack-0.17.1.js} (99%) rename vendor/{knockback-core-stack-0.17.0.js => knockback-core-stack-0.17.1.js} (99%) rename vendor/test/{knockback-core-0.17.0.js => knockback-core-0.17.1.js} (94%) diff --git a/examples/pnp-nt-i_xui_pth_kb.html b/examples/pnp-nt-i_xui_pth_kb.html index 81a6b6a..2edd52c 100644 --- a/examples/pnp-nt-i_xui_pth_kb.html +++ b/examples/pnp-nt-i_xui_pth_kb.html @@ -39,7 +39,7 @@

Page2

- + - + diff --git a/examples/pnp-t-i_jq_kb.html b/examples/pnp-t-i_jq_kb.html index 95b37cd..7b036c4 100644 --- a/examples/pnp-t-i_jq_kb.html +++ b/examples/pnp-t-i_jq_kb.html @@ -31,7 +31,7 @@

- + diff --git a/examples/pnp-t_jq_kb.html b/examples/pnp-t_jq_kb.html index 539648e..c327596 100644 --- a/examples/pnp-t_jq_kb.html +++ b/examples/pnp-t_jq_kb.html @@ -31,7 +31,7 @@

- + diff --git a/examples/pnp-t_zpt_kb.html b/examples/pnp-t_zpt_kb.html index 59c692d..5b9015e 100644 --- a/examples/pnp-t_zpt_kb.html +++ b/examples/pnp-t_zpt_kb.html @@ -31,7 +31,7 @@

- + diff --git a/examples/pns-e_jq_kb.html b/examples/pns-e_jq_kb.html index af6bf05..e3d200e 100644 --- a/examples/pns-e_jq_kb.html +++ b/examples/pns-e_jq_kb.html @@ -30,7 +30,7 @@

- + - + - + - + - + diff --git a/test/knockback-page-navigator-simple/test-amd.coffee b/test/knockback-page-navigator-simple/test-amd.coffee index 884f201..081c27e 100644 --- a/test/knockback-page-navigator-simple/test-amd.coffee +++ b/test/knockback-page-navigator-simple/test-amd.coffee @@ -4,7 +4,7 @@ try 'underscore': "../../vendor/test/underscore-1.4.4" 'backbone': "../../vendor/test/backbone-1.0.0" 'knockout': "../../vendor/test/knockout-2.2.1" - 'knockback': "../../vendor/test/knockback-core-0.17.0" + 'knockback': "../../vendor/test/knockback-core-0.17.1" 'knockback-page-navigator-simple': "../../knockback-page-navigator-simple" shim: underscore: diff --git a/test/knockback-page-navigator-simple/test-latest.html b/test/knockback-page-navigator-simple/test-latest.html index 012158a..560c4e4 100644 --- a/test/knockback-page-navigator-simple/test-latest.html +++ b/test/knockback-page-navigator-simple/test-latest.html @@ -5,7 +5,7 @@ Knockback.PageNavigatorSimple Test Suite - + diff --git a/test/knockback-pane-navigator/test-amd.coffee b/test/knockback-pane-navigator/test-amd.coffee index d61f82e..e4c0344 100644 --- a/test/knockback-pane-navigator/test-amd.coffee +++ b/test/knockback-pane-navigator/test-amd.coffee @@ -4,7 +4,7 @@ try 'underscore': "../../vendor/test/underscore-1.4.4" 'backbone': "../../vendor/test/backbone-1.0.0" 'knockout': "../../vendor/test/knockout-2.2.1" - 'knockback': "../../vendor/test/knockback-core-0.17.0" + 'knockback': "../../vendor/test/knockback-core-0.17.1" 'knockback-pane-navigator': "../../knockback-pane-navigator" shim: underscore: diff --git a/test/knockback-pane-navigator/test-latest.html b/test/knockback-pane-navigator/test-latest.html index 72b90bf..4bb63eb 100644 --- a/test/knockback-pane-navigator/test-latest.html +++ b/test/knockback-pane-navigator/test-latest.html @@ -4,7 +4,7 @@ Knockback.PaneNavigator Test Suite - + diff --git a/vendor/knockback-core-stack-0.17.0.js b/vendor/knockback-core-stack-0.17.1.js similarity index 99% rename from vendor/knockback-core-stack-0.17.0.js rename to vendor/knockback-core-stack-0.17.1.js index bc658f9..9084284 100644 --- a/vendor/knockback-core-stack-0.17.0.js +++ b/vendor/knockback-core-stack-0.17.1.js @@ -1,5 +1,5 @@ /* - knockback-core-stack.js 0.17.0 + knockback-core-stack.js 0.17.1 (c) 2011-2013 Kevin Malakoff - http://kmalakoff.github.com/knockback/ License: MIT (http://www.opensource.org/licenses/mit-license.php) Dependencies: Knockout.js, Backbone.js, and Underscore.js. @@ -6424,7 +6424,7 @@ ko.exportSymbol('nativeTemplateEngine', ko.nativeTemplateEngine); }()); })(); /* - knockback-core.js 0.17.0 + knockback-core.js 0.17.1 (c) 2011-2013 Kevin Malakoff - http://kmalakoff.github.com/knockback/ License: MIT (http://www.opensource.org/licenses/mit-license.php) Dependencies: Knockout.js, Backbone.js, and Underscore.js. @@ -6441,7 +6441,7 @@ ko.exportSymbol('nativeTemplateEngine', ko.nativeTemplateEngine); } })(function() {// Generated by CoffeeScript 1.6.2 /* - knockback-core.js 0.17.0 + knockback-core.js 0.17.1 (c) 2011-2013 Kevin Malakoff. Knockback.js is freely distributable under the MIT license. See the following for full license details: @@ -6449,13 +6449,13 @@ ko.exportSymbol('nativeTemplateEngine', ko.nativeTemplateEngine); Dependencies: Knockout.js, Backbone.js, and Underscore.js. */ -var COMPARE_ASCENDING, COMPARE_DESCENDING, COMPARE_EQUAL, KB_TYPE_ARRAY, KB_TYPE_COLLECTION, KB_TYPE_MODEL, KB_TYPE_SIMPLE, KB_TYPE_UNKNOWN, addStatisticsEvent, collapseOptions, copyProps, e, kb, ko, onReady, _, _argumentsAddKey, _arraySplice, _legacyWarning, _throwMissing, _throwUnexpected, _unwrapModels, _unwrapObservable, _wrappedKey, +var COMPARE_ASCENDING, COMPARE_DESCENDING, COMPARE_EQUAL, KB_TYPE_ARRAY, KB_TYPE_COLLECTION, KB_TYPE_MODEL, KB_TYPE_SIMPLE, KB_TYPE_UNKNOWN, addStatisticsEvent, collapseOptions, copyProps, e, kb, ko, onReady, _, _argumentsAddKey, _arraySplice, _ko_applyBindings, _legacyWarning, _throwMissing, _throwUnexpected, _unwrapModels, _unwrapObservable, _wrappedKey, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; kb = (function() { function kb() {} - kb.VERSION = '0.17.0'; + kb.VERSION = '0.17.1'; kb.TYPE_UNKNOWN = 0; @@ -6471,49 +6471,73 @@ kb = (function() { return !obj || obj.__kb_released; }; - kb.release = function(obj, pre_release_fn) { - var array, item, view_model, view_models, _i, _j, _len, _len1; + kb.isReleaseable = function(obj, depth) { + var key, value; - if ((!obj || (obj !== Object(obj))) || ((typeof obj === 'function') && !ko.isObservable(obj)) || obj.__kb_released || ((obj instanceof kb.Model) || (obj instanceof kb.Collection))) { - return this; + if (depth == null) { + depth = 0; + } + if ((!obj || (obj !== Object(obj))) || obj.__kb_released) { + return false; + } else if (ko.isObservable(obj) || (obj instanceof kb.ViewModel)) { + return true; + } else if ((typeof obj === 'function') || (obj instanceof kb.Model) || (obj instanceof kb.Collection)) { + return false; + } else if ((typeof obj.dispose === 'function') || (typeof obj.destroy === 'function') || (typeof obj.release === 'function')) { + return true; + } else if (depth < 1) { + for (key in obj) { + value = obj[key]; + if ((key !== '__kb') && kb.isReleaseable(value, depth + 1)) { + return true; + } + } + } + return false; + }; + + kb.release = function(obj) { + var array, index, value; + + if (!kb.isReleaseable(obj)) { + return; } if (_.isArray(obj)) { - array = obj.splice(0, obj.length); - for (_i = 0, _len = array.length; _i < _len; _i++) { - item = array[_i]; - kb.release(item); + for (index in obj) { + value = obj[index]; + if (kb.isReleaseable(value)) { + obj[index] = null; + kb.release(value); + } } - return this; + return; } obj.__kb_released = true; - !pre_release_fn || pre_release_fn(); - if (ko.isObservable(obj) || (typeof obj.dispose === 'function') || (typeof obj.destroy === 'function') || (typeof obj.release === 'function')) { - if (ko.isObservable(obj) && _.isArray(array = obj())) { - if (obj.__kb_is_co || (obj.__kb_is_o && (obj.valueType() === KB_TYPE_COLLECTION))) { - if (obj.destroy) { - obj.destroy(); - } else if (obj.dispose) { - obj.dispose(); - } - } else if (array.length) { - view_models = array.slice(0); - array.splice(0, array.length); - for (_j = 0, _len1 = view_models.length; _j < _len1; _j++) { - view_model = view_models[_j]; - kb.release(view_model); + if (ko.isObservable(obj) && _.isArray(array = obj())) { + if (obj.__kb_is_co || (obj.__kb_is_o && (obj.valueType() === KB_TYPE_COLLECTION))) { + if (obj.destroy) { + obj.destroy(); + } else if (obj.dispose) { + obj.dispose(); + } + } else if (array.length) { + for (index in array) { + value = array[index]; + if (kb.isReleaseable(value)) { + array[index] = null; + kb.release(value); } } - } else if (obj.release) { - obj.release(); - } else if (obj.destroy) { - obj.destroy(); - } else if (obj.dispose) { - obj.dispose(); } - } else { + } else if (typeof obj.release === 'function') { + obj.release(); + } else if (typeof obj.destroy === 'function') { + obj.destroy(); + } else if (typeof obj.dispose === 'function') { + obj.dispose(); + } else if (!ko.isObservable(obj)) { this.releaseKeys(obj); } - return this; }; kb.releaseKeys = function(obj) { @@ -6521,11 +6545,11 @@ kb = (function() { for (key in obj) { value = obj[key]; - (key === '__kb') || kb.release(value, (function() { - return obj[key] = null; - })); + if ((key !== '__kb') && kb.isReleaseable(value)) { + obj[key] = null; + kb.release(value); + } } - return this; }; kb.releaseOnNodeRemove = function(view_model, node) { @@ -7725,8 +7749,8 @@ kb.ViewModel = (function() { this.__kb.vm_keys = {}; this.__kb.model_keys = {}; this.__kb.view_model = _.isUndefined(view_model) ? this : view_model; - !options.internals || (this.__kb.internals = options.internals); - !options.excludes || (this.__kb.excludes = options.excludes); + !options.internals || (this.__kb.internals = (_.isArray(options.internals) ? options.internals : [options.internals])); + !options.excludes || (this.__kb.excludes = (_.isArray(options.excludes) ? options.excludes : [options.excludes])); kb.Store.useOptionsOrCreate(options, model, this); this.__kb.path = options.path; kb.Factory.useOptionsOrCreate(options, this, options.path); @@ -7765,17 +7789,14 @@ kb.ViewModel = (function() { event_watcher = kb.utils.wrappedEventWatcher(this, new kb.EventWatcher(model, this, { emitter: this.model })); - if (options.requires && _.isArray(options.requires)) { - keys = _.clone(options.requires); + if (options.requires) { + keys = _.isArray(options.requires) ? _.clone(options.requires) : [options.requires]; } if (this.__kb.internals) { keys = keys ? _.union(keys, this.__kb.internals) : _.clone(this.__kb.internals); } if (options.keys) { - if (_.isArray(options.keys)) { - this.__kb.keys = options.keys; - keys = keys ? _.union(keys, options.keys) : _.clone(options.keys); - } else { + if (_.isObject(options.keys) && !_.isArray(options.keys)) { mapped_keys = {}; _ref = options.keys; for (vm_key in _ref) { @@ -7783,6 +7804,9 @@ kb.ViewModel = (function() { mapped_keys[_.isString(mapping_info) ? mapping_info : (mapping_info.key ? mapping_info.key : vm_key)] = true; } this.__kb.keys = _.keys(mapped_keys); + } else { + this.__kb.keys = _.isArray(options.keys) ? options.keys : [options.keys]; + keys = keys ? _.union(keys, this.__kb.keys) : _.clone(this.__kb.keys); } } else { bb_model = event_watcher.emitter(); @@ -8038,12 +8062,15 @@ kb.CollectionObservable = (function() { array = observable(); array.splice(0, array.length); } + this.collection.dispose(); + this._collection = observable.collection = this.collection = null; this._mapper.dispose(); this._mapper = null; kb.release(this._filters); + this._filters = null; this._comparator(null); - this.collection.dispose(); - observable.collection = this.collection = null; + this._comparator = null; + this.create_options = null; observable.collection = null; kb.utils.wrappedDestroy(this); return !kb.statistics || kb.statistics.unregister('CollectionObservable', this); @@ -8301,6 +8328,8 @@ kb.collectionObservable = function(collection, options) { */ +kb.RECUSIVE_AUTO_INJECT = true; + ko.bindingHandlers['inject'] = { 'init': function(element, value_accessor, all_bindings_accessor, view_model) { return kb.Inject.inject(_unwrapObservable(value_accessor()), view_model, element, value_accessor, all_bindings_accessor); @@ -8405,6 +8434,17 @@ kb.Inject = (function() { })(); +_ko_applyBindings = ko.applyBindings; + +ko.applyBindings = function(context, element) { + var results; + + results = kb.RECUSIVE_AUTO_INJECT ? kb.injectViewModels(element) : []; + if (!results.length) { + return _ko_applyBindings.apply(this, arguments); + } +}; + kb.injectViewModels = kb.Inject.injectViewModels; if (this.$) { diff --git a/vendor/test/knockback-core-0.17.0.js b/vendor/test/knockback-core-0.17.1.js similarity index 94% rename from vendor/test/knockback-core-0.17.0.js rename to vendor/test/knockback-core-0.17.1.js index 20fe008..607d8f9 100644 --- a/vendor/test/knockback-core-0.17.0.js +++ b/vendor/test/knockback-core-0.17.1.js @@ -1,5 +1,5 @@ /* - knockback-core.js 0.17.0 + knockback-core.js 0.17.1 (c) 2011-2013 Kevin Malakoff - http://kmalakoff.github.com/knockback/ License: MIT (http://www.opensource.org/licenses/mit-license.php) Dependencies: Knockout.js, Backbone.js, and Underscore.js. @@ -16,7 +16,7 @@ } })(function() {// Generated by CoffeeScript 1.6.2 /* - knockback-core.js 0.17.0 + knockback-core.js 0.17.1 (c) 2011-2013 Kevin Malakoff. Knockback.js is freely distributable under the MIT license. See the following for full license details: @@ -24,13 +24,13 @@ Dependencies: Knockout.js, Backbone.js, and Underscore.js. */ -var COMPARE_ASCENDING, COMPARE_DESCENDING, COMPARE_EQUAL, KB_TYPE_ARRAY, KB_TYPE_COLLECTION, KB_TYPE_MODEL, KB_TYPE_SIMPLE, KB_TYPE_UNKNOWN, addStatisticsEvent, collapseOptions, copyProps, e, kb, ko, onReady, _, _argumentsAddKey, _arraySplice, _legacyWarning, _throwMissing, _throwUnexpected, _unwrapModels, _unwrapObservable, _wrappedKey, +var COMPARE_ASCENDING, COMPARE_DESCENDING, COMPARE_EQUAL, KB_TYPE_ARRAY, KB_TYPE_COLLECTION, KB_TYPE_MODEL, KB_TYPE_SIMPLE, KB_TYPE_UNKNOWN, addStatisticsEvent, collapseOptions, copyProps, e, kb, ko, onReady, _, _argumentsAddKey, _arraySplice, _ko_applyBindings, _legacyWarning, _throwMissing, _throwUnexpected, _unwrapModels, _unwrapObservable, _wrappedKey, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; kb = (function() { function kb() {} - kb.VERSION = '0.17.0'; + kb.VERSION = '0.17.1'; kb.TYPE_UNKNOWN = 0; @@ -46,49 +46,73 @@ kb = (function() { return !obj || obj.__kb_released; }; - kb.release = function(obj, pre_release_fn) { - var array, item, view_model, view_models, _i, _j, _len, _len1; + kb.isReleaseable = function(obj, depth) { + var key, value; - if ((!obj || (obj !== Object(obj))) || ((typeof obj === 'function') && !ko.isObservable(obj)) || obj.__kb_released || ((obj instanceof kb.Model) || (obj instanceof kb.Collection))) { - return this; + if (depth == null) { + depth = 0; + } + if ((!obj || (obj !== Object(obj))) || obj.__kb_released) { + return false; + } else if (ko.isObservable(obj) || (obj instanceof kb.ViewModel)) { + return true; + } else if ((typeof obj === 'function') || (obj instanceof kb.Model) || (obj instanceof kb.Collection)) { + return false; + } else if ((typeof obj.dispose === 'function') || (typeof obj.destroy === 'function') || (typeof obj.release === 'function')) { + return true; + } else if (depth < 1) { + for (key in obj) { + value = obj[key]; + if ((key !== '__kb') && kb.isReleaseable(value, depth + 1)) { + return true; + } + } + } + return false; + }; + + kb.release = function(obj) { + var array, index, value; + + if (!kb.isReleaseable(obj)) { + return; } if (_.isArray(obj)) { - array = obj.splice(0, obj.length); - for (_i = 0, _len = array.length; _i < _len; _i++) { - item = array[_i]; - kb.release(item); + for (index in obj) { + value = obj[index]; + if (kb.isReleaseable(value)) { + obj[index] = null; + kb.release(value); + } } - return this; + return; } obj.__kb_released = true; - !pre_release_fn || pre_release_fn(); - if (ko.isObservable(obj) || (typeof obj.dispose === 'function') || (typeof obj.destroy === 'function') || (typeof obj.release === 'function')) { - if (ko.isObservable(obj) && _.isArray(array = obj())) { - if (obj.__kb_is_co || (obj.__kb_is_o && (obj.valueType() === KB_TYPE_COLLECTION))) { - if (obj.destroy) { - obj.destroy(); - } else if (obj.dispose) { - obj.dispose(); - } - } else if (array.length) { - view_models = array.slice(0); - array.splice(0, array.length); - for (_j = 0, _len1 = view_models.length; _j < _len1; _j++) { - view_model = view_models[_j]; - kb.release(view_model); + if (ko.isObservable(obj) && _.isArray(array = obj())) { + if (obj.__kb_is_co || (obj.__kb_is_o && (obj.valueType() === KB_TYPE_COLLECTION))) { + if (obj.destroy) { + obj.destroy(); + } else if (obj.dispose) { + obj.dispose(); + } + } else if (array.length) { + for (index in array) { + value = array[index]; + if (kb.isReleaseable(value)) { + array[index] = null; + kb.release(value); } } - } else if (obj.release) { - obj.release(); - } else if (obj.destroy) { - obj.destroy(); - } else if (obj.dispose) { - obj.dispose(); } - } else { + } else if (typeof obj.release === 'function') { + obj.release(); + } else if (typeof obj.destroy === 'function') { + obj.destroy(); + } else if (typeof obj.dispose === 'function') { + obj.dispose(); + } else if (!ko.isObservable(obj)) { this.releaseKeys(obj); } - return this; }; kb.releaseKeys = function(obj) { @@ -96,11 +120,11 @@ kb = (function() { for (key in obj) { value = obj[key]; - (key === '__kb') || kb.release(value, (function() { - return obj[key] = null; - })); + if ((key !== '__kb') && kb.isReleaseable(value)) { + obj[key] = null; + kb.release(value); + } } - return this; }; kb.releaseOnNodeRemove = function(view_model, node) { @@ -1300,8 +1324,8 @@ kb.ViewModel = (function() { this.__kb.vm_keys = {}; this.__kb.model_keys = {}; this.__kb.view_model = _.isUndefined(view_model) ? this : view_model; - !options.internals || (this.__kb.internals = options.internals); - !options.excludes || (this.__kb.excludes = options.excludes); + !options.internals || (this.__kb.internals = (_.isArray(options.internals) ? options.internals : [options.internals])); + !options.excludes || (this.__kb.excludes = (_.isArray(options.excludes) ? options.excludes : [options.excludes])); kb.Store.useOptionsOrCreate(options, model, this); this.__kb.path = options.path; kb.Factory.useOptionsOrCreate(options, this, options.path); @@ -1340,17 +1364,14 @@ kb.ViewModel = (function() { event_watcher = kb.utils.wrappedEventWatcher(this, new kb.EventWatcher(model, this, { emitter: this.model })); - if (options.requires && _.isArray(options.requires)) { - keys = _.clone(options.requires); + if (options.requires) { + keys = _.isArray(options.requires) ? _.clone(options.requires) : [options.requires]; } if (this.__kb.internals) { keys = keys ? _.union(keys, this.__kb.internals) : _.clone(this.__kb.internals); } if (options.keys) { - if (_.isArray(options.keys)) { - this.__kb.keys = options.keys; - keys = keys ? _.union(keys, options.keys) : _.clone(options.keys); - } else { + if (_.isObject(options.keys) && !_.isArray(options.keys)) { mapped_keys = {}; _ref = options.keys; for (vm_key in _ref) { @@ -1358,6 +1379,9 @@ kb.ViewModel = (function() { mapped_keys[_.isString(mapping_info) ? mapping_info : (mapping_info.key ? mapping_info.key : vm_key)] = true; } this.__kb.keys = _.keys(mapped_keys); + } else { + this.__kb.keys = _.isArray(options.keys) ? options.keys : [options.keys]; + keys = keys ? _.union(keys, this.__kb.keys) : _.clone(this.__kb.keys); } } else { bb_model = event_watcher.emitter(); @@ -1613,12 +1637,15 @@ kb.CollectionObservable = (function() { array = observable(); array.splice(0, array.length); } + this.collection.dispose(); + this._collection = observable.collection = this.collection = null; this._mapper.dispose(); this._mapper = null; kb.release(this._filters); + this._filters = null; this._comparator(null); - this.collection.dispose(); - observable.collection = this.collection = null; + this._comparator = null; + this.create_options = null; observable.collection = null; kb.utils.wrappedDestroy(this); return !kb.statistics || kb.statistics.unregister('CollectionObservable', this); @@ -1876,6 +1903,8 @@ kb.collectionObservable = function(collection, options) { */ +kb.RECUSIVE_AUTO_INJECT = true; + ko.bindingHandlers['inject'] = { 'init': function(element, value_accessor, all_bindings_accessor, view_model) { return kb.Inject.inject(_unwrapObservable(value_accessor()), view_model, element, value_accessor, all_bindings_accessor); @@ -1980,6 +2009,17 @@ kb.Inject = (function() { })(); +_ko_applyBindings = ko.applyBindings; + +ko.applyBindings = function(context, element) { + var results; + + results = kb.RECUSIVE_AUTO_INJECT ? kb.injectViewModels(element) : []; + if (!results.length) { + return _ko_applyBindings.apply(this, arguments); + } +}; + kb.injectViewModels = kb.Inject.injectViewModels; if (this.$) {