2012-01-29 146 views
1

我讀過這個,它似乎是我正在尋找的答案,但似乎並不完全理解發生了什麼。 Dynamically choosing a view at runtime with Ember + Handlebars如何在視圖內切換視圖?

FWIW,ember.StateManager據我瞭解不能嵌套工作。因此,如果應用程序視圖中包含子部分,則無法將其用於單個頁面應用程序,以便在應用程序視圖和用戶配置文件視圖之間切換。所以我覺得必須有另一種方式。

所以簡單的example來說明我正在嘗試做什麼。

 (function($){ 
    window.APP = Ember.Application.create(); 
    /*models*/ 
    $.models = {}; 
    $.models.c = Ember.Object.create({ 
        first_name: "joe", 
        last_name: "blow" 
       }); 

    $.models.a = Ember.Object.create({ 
        street:"1 wall street plaza", 
        city: "New York City", 
        state: "NY", 
        zip: "10101" 
       }); 

    //views (sections of the application 
    $.views = {}; 
    $.views.name = Ember.View.extend({template:Ember.Handlebars.compile("{{content.first_name}} {{content.last_name}}"), 
        contentBinding: "$.models.c" 
        }); 

    $.views.address = Ember.View.extend({template: Ember.Handlebars.compile("{{content.street}} {{content.city}} {{content.state}} {{content.zip}}"), 
       contentBinding: "$.models.a"}); 

    //something to hold the current view(section) 
    $.navmodel = Ember.Object.create({current:$.views.address}); 

    //view to display the current view(section) 
    $.nav = Ember.View.create({template: Ember.Handlebars.compile("{{view current}}"), 
        currentBinding: "$.navmodel.current" 
        }); 

    //add to page 
    $.nav.appendTo("#content"); 

    //switch between the pages 
    setTimeout(function(){ 
     $.navmodel.set("current", $.views.name); 
     alert("set"); 
    },1000); 
})(jQuery); 

是的,我知道Ember.StateManager可用於這一點,但如果我再需要嵌套子視圖的StateManager不會將它的工作?

+0

Ember.StateManager不再是核心的一部分。 – 2014-02-19 18:05:22

回答

2

首先,我確信Ember StateManager不處理嵌套狀態。但我不能給你一個具體的例子。我已經和國家打了一些比賽,但是Ember.js的那部分還不夠穩定,所以我停下來感到沮喪。

至於不使用StateManager切換視圖,這是完全可行的。嘗試使用ContainerView交換$ .nav視圖。這樣的事情應該做的伎倆(注意,未測試的代碼!):

$.nav = Ember.ContainerView.create({ 
    switchView: function(view) { 
     var childViews = this.get("childViews"); 
     childViews.popObject();  // Remove the current view, if any 
     childViews.pushObject(view); // Add the requested view 
    }, 
}); 

Ember documentation有一個關於你應該看一看的ContainerView部分。

+0

謝謝克勞德,我會盡快嘗試。 – 2012-01-30 18:39:26

+0

Ember.StateManager不再是核心的一部分。 – 2014-02-19 18:06:02