2013-01-22 80 views

回答

4

如何解決:

似乎沒有要任何東西不對您的意見或模板。如果您使用Ember路由器來管理視圖,而不是通過appendTo手動創建它們,它們將會工作。因此,而不是:

var view = App.ParentView.create({ controller: App.ParentController.create() }); 
view.appendTo('#dvViewRender'); 

使用路由器:

App.Router.map(function() { 
    this.route("parent", { path: "/" }); 
}); 

,並定義應用程序模板:

<script type="text/x-handlebars">{{outlet}}</script> 

證明它!

工作小提琴這裏:http://jsfiddle.net/mgrassotti/vQpe6/1/

爲什麼工作?

render幫助程序旨在用於Ember.Router託管視圖的上下文中。當您致電{{render "child"}}時,ember會嘗試爲子模板查找適當的控制器類。

如果我真的想使用appendTo方法怎麼辦?

好的,但不能使用render幫手。其他選項:

  • {{partial 'child'}}將插入子模板,但不會將其連接到ChildView或ChildController

  • 使用的視圖助手,它會插入App.ChildView,它的渲染它在上下文模板ParentController

  • 使用的出口,然後手動連接它與App.ChildController

的實例,以App.ChildView

* UPDATE(基於COMMENT)*

由於這種動態和獨立的性質,我不能嵌入整個頁面佈局和在一個應用程序模板,因此,任何建議的部件在這種使用灰燼情景?

每個控件都可以是一個獨立的應用程序。每個人仍然有一個路由器來管理它的狀態,但通過設置history: none路由器將不會連接到瀏覽器的網址。例如:

var Widget2App = Ember.Application.create({ 
    rootElement: '#widget2', 
    history: 'none', 
    ApplicationView: Ember.View.extend({ 
    templateName: 'widget2', 
    }), 
    ParentView: Ember.View.extend({ 
    templateName: 'parent2', 
表示1個第2個燼應用

更新例如:不使用路由器http://jsfiddle.net/mgrassotti/L6aVB/

+2

感謝您的快速回復的原因很 1.我的應用程序是不是一個單一的網頁應用程序,它是一個ASP.NET MVC應用程序,它有自己的路由機制 2.我的應用程序有一種widgetized的UI,就像[iGoogle.com](http://www.google.com/ig)那裏的小工具獨立工作,他人的知識可以動態添加,刪除,重新定位。由於這種動態和獨立的特性,我不能將整個頁面佈局和小部件嵌入到一個應用程序模板中 因此,在這種情況下使用Ember的任何建議? –

+1

沒問題。您仍然可以使用路由器,只需設置'history:none',以便小部件路由不會影響您的整體應用程序。用一個例子更新了我的答案.. –

+0

這非常適合我的場景,我有一個小問題,可以有多個應用程序實例,並且會有使用此方法時需要注意的任何副作用/影響嗎? –