I've been thinking for a while that it would make sense for can.view to always return a Deferred (especially if jQuery 2.0 gets rid of synchronous loading which is what can.view currently does expecting you to pre-compile the views in production). There is a long running issue for this at https://github.com/bitovi/canjs/issues/64
But in your case you probably won't get a Deferred back unless `e` or `f` is a Deferred. From the error message it looks as if you get the rendered document fragment back already.