2013-05-31 63 views
0

我想插入一個動態視圖(做一個工具提示)有一個動態模板,以便在內部即時創建和附加到父元素的視圖。我得到以下錯誤插入視圖與動態模板

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')) 
+1

這個'@get('templateToShow')'返回什麼值? – intuitivepixel

+0

它返回一個有效並退出的模板名稱。如果我直接在這裏放置模板名稱,結果和錯誤保持不變 – Piotr

回答

3

無禮的我做了你想要的部分頁面。

所以我做了一個視圖的容器視圖,我想渲染。例如:

{{view MainApp.AppContainerView elementId="appContainerView"}} 

然後,當我需要在這個容器內渲染一個特別的神廟時,我用ajax把它覆蓋了。例如,如果我想顯示模板「xpto」,我在一個名爲「xpto.handlebars」的文件中使用了該模板。所以我這樣做:

view = Ember.View.create({ 
       willInsertElement : function(){ 
        var isLoaded = this.isLoaded; 
        if(!isLoaded){ 
         getTemplate("/app_dev/templates/" + templateName + ".handlebars", this); 
        } 
       } 
      }); 

其中「TEMPLATENAME」其要顯示你的模板,在這種情況下,它的「xpto」名,「是getTemplate」它的一個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(); 
      } 

     }    
    });  
} 

,最後我這樣做是爲了將視圖添加到container:

var containerView = Em.View.views['appContainerView']; 
    if(containerView == undefined) 
     return; 
    var temp = containerView.toArray(); 
    if(temp.length > 0) 
     containerView.unshiftObject(); 
    containerView.addObject(view); 

我希望這可以幫助你,

Juanito

+0

謝謝我設法做到了不同,我在自定義模板名稱模板中使用通用視圖以滿足我的需求。但是,非常感謝你給出了一些新想法的答案;) – Piotr