From ad1a35c042cbcde7eca129b062b7373982ff9a3f Mon Sep 17 00:00:00 2001 From: David Luecke Date: Fri, 13 Dec 2013 13:37:37 -0700 Subject: [PATCH] each Mustache helper should not error when trying to iterate over undefined list --- view/mustache/mustache.js | 4 ++++ view/mustache/mustache_test.js | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/view/mustache/mustache.js b/view/mustache/mustache.js index fbc29d5f5ef..5bb8f57e005 100644 --- a/view/mustache/mustache.js +++ b/view/mustache/mustache.js @@ -1890,6 +1890,10 @@ function( can ){ * */ 'each': function(expr, options) { + if(!expr) { + return; + } + if(expr.isComputed || isObserveLike(expr) && typeof expr.attr('length') !== 'undefined'){ return can.view.lists && can.view.lists(expr, function(item, key) { // Create a compute that listens to whenever the index of the item in our list changes. diff --git a/view/mustache/mustache_test.js b/view/mustache/mustache_test.js index 774b1973128..a3f37a6b555 100644 --- a/view/mustache/mustache_test.js +++ b/view/mustache/mustache_test.js @@ -2585,4 +2585,13 @@ test('html comments must not break mustache scanner', function(){ }); }) +test("{{each}} does not error with undefined list (#602)", function() { + var renderer = can.view.mustache('
{{#each data}}{{name}}{{/each}}
'); + + equal(renderer.render({}), '
', 'Empty text rendered'); + equal(renderer.render({ data: false }), '
', 'Empty text rendered'); + equal(renderer.render({ data: null }), '
', 'Empty text rendered'); + equal(renderer.render({ data: [ { name: 'David' }] }), '
David
', 'Expected name rendered'); +}); + })();