2013-01-11 55 views
16

我正在使用Ember,我的視圖呈現在我的HTML DOM的底部,而不是在div元素中。 這裏是我的源代碼:Ember視圖呈現在DOM的底部

的index.html:

<body> 
    <div id="test"> 
    <script type="text/x-handlebars"> 
     {{view Skills.RecommendedSkillsListView}} 
    </script> 
    </div> 

    <script type="text/x-handlebars" data-template-name="recommended_skills_list"> 
    <a href="#" {{action "b"}}>DO A NEW THING</a> 
    </script> 

    <script src="js/libs/jquery-1.8.3.min.js"></script> 
    <script src="js/libs/handlebars-1.0.rc.1.js"></script> 
    <script src="js/libs/ember-1.0.0-pre.2.js"></script> 
    <script src="js/app.js"></script> 
</body> 

app.js:

Skills = Ember.Application.create({}); 
Skills.RecommendedSkillsListView = Ember.View.extend({ 
    templateName: 'recommended_skills_list', 
    b: function(v) { 
     alert('new hello'); 
    }  
}); 
Skills.initialize(); 

渲染的文件:

<body class="ember-application"> 
    <div id="test"></div> 

    <script src="js/libs/jquery-1.8.3.min.js"></script> 
    <script src="js/libs/handlebars-1.0.rc.1.js"></script> 
    <script src="js/libs/ember-1.0.0-pre.2.js"></script> 
    <script src="js/app.js"></script> 

    <div id="ember135" class="ember-view"> 
    <div id="ember140" class="ember-view"> 
     <a href="#" data-ember-action="1">DO A NEW THING</a> 
    </div> 
    </div> 
</body> 

注意:當使用與以前版本的燼(0.9.5)相同的代碼時,它如預期的那樣工作

回答

22

啊,它看起來像'附加你的觀點'給你的身體, 'Ember尋找的模板名稱。爲什麼不嘗試在body中放置一個div,然後在Ember.Application.create()中引用它;?

Ember.Router

Skills = Ember.Application.create({ 
    rootElement: '#test' 
}); 

查看

<body> 
    <div id="test"></div> 

    <script src="js/libs/jquery-1.8.3.min.js"></script> 
    <script src="js/libs/handlebars-1.0.rc.1.js"></script> 
    <script src="js/libs/ember-1.0.0-pre.2.js"></script> 
    <script src="js/app.js"></script> 

    <div id="ember135" class="ember-view"> 
    <div id="ember140" class="ember-view"> 
     <a href="#" data-ember-action="1">DO A NEW THING</a> 
    </div> 
    </div> 
</body> 

讓我知道如果我錯過了點;)

+0

謝謝您的回答,但其實這並沒有解決真正的問題:/看我要評論以前的答案! – alxscms

+0

請幫我解釋downvote(誰downvoted)謝謝:) –

11

你需要指定的元素將您的應用程序使用rootElementdocs here,相關問題:Emberjs rootElement)您的應用程序的屬性:

Skills = Ember.Application.create({ 
    rootElement: "#test" 
}); 

這裏是一個工作示例:jsfiddle example

從例如渲染輸出:

<body> 
    <div id="test" class="ember-application"> 
    <div id="ember135" class="ember-view"> 
     <div id="ember140" class="ember-view"> 
     <a href="#" data-ember-action="1">DO A NEW THING</a> 
     </div> 
    </div> 
    </div> 
</body> 
+0

這個解決方案實際上在我的例子中工作,但如果我有兩個div元素(#test和#test2),我想有一個特定的視圖呈現在每個div元素中?你的解決方案只允許我改變根目錄,但並不能真正解決我的問題。有什麼想法? (我的代碼在這裏和ember-1.0.pre.min.js完美搭配) 感謝您的時間! – alxscms

+0

@alxscms您應該將所有的ember模板都渲染到您的應用程序的單個'rootElement'下,但是您可以使用ember功能來完全靈活地將哪些元素渲染到您的'rootElement'內。這是一個並排渲染3個視圖的示例(http://jsfiddle.net/arasbm/fLBty/3/)。它稍微過時了,所以您將不得不查看當前的指南,瞭解如何在當前版本的ember中執行此操作(http://emberjs.com/guides/)。 – CraigTeegarden

+0

我也解決了它使用這個答案,但仍然不知道爲什麼它不工作。 – icemelt7