我正在尝试插入一个动态视图(制作工具提示),该动态视图具有动态模板以进行渲染,因此在创建内容并将视图附加到父元素。我收到以下错误
Uncaught Error: assertion failed: You specified the templateName ... for <(subclass of Ember.View):ember1104>, but it did not exist.
模板存在,我可以使用视图助手在其他模板中添加视图。这是我的父视图示例:
App.ModalOverlayView = Ember.View.extend
templateName: 'modal_overlay/layout'
didInsertElement: ->
textView = Ember.View.extend({templateName: @get('templateToShow')}).create()
textView.appendTo(@$('.text'))
答案 0 :(得分:3)
Bassically我在页面的各个部分做了你想做的事。
所以我所做的是为我想渲染的视图设置了容器视图。例如:
{{view MainApp.AppContainerView elementId="appContainerView"}}
然后,当我需要在容器内部渲染一个espefic模板时,我用ajax对它进行了编码。例如,如果我想显示模板&#34; xpto&#34;,我将此模板放在名为&#34; xpto.handlebars&#34;的文件中。所以我这样做了:
view = Ember.View.create({
willInsertElement : function(){
var isLoaded = this.isLoaded;
if(!isLoaded){
getTemplate("/app_dev/templates/" + templateName + ".handlebars", this);
}
}
});
其中&#34; templateName&#34;它是您要显示的模板的名称,在这种情况下是&#34; xpto&#34;和&#34; getTemplate&#34;它是获取模板的ajax函数:
function getTemplate(path, view){
$.ajax({
url: path,
xhrFields: {
withCredentials: true
},
//cache: true,
success: function(data) {
var templateName = "";
$(data).filter('script[type="text/x-handlebars"]').each(function() {
templateName = $(this).attr('data-template-name');
Ember.TEMPLATES[templateName] = Ember.Handlebars.compile($(this).html());
});
if(view != null){
view.set("templateName", templateName);
view.rerender();
}
}
});
}
最后我这样做是为了将视图添加到容器中:
var containerView = Em.View.views['appContainerView'];
if(containerView == undefined)
return;
var temp = containerView.toArray();
if(temp.length > 0)
containerView.unshiftObject();
containerView.addObject(view);
我希望这可以帮到你,
尼托