2012-01-29 132 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