2013-08-21 79 views
2

Ey guys我有一個關於更改父模板內部屬性的簡單問題。 ,我編寫的代碼如下陳述:Ember.js:更新父模板屬性

App.Router.map(function() { 
    this.resource('parent' , { path: "/parent" }, function() { 
    this.route('child1'); 
    this.route('child2'); 
    this.route('child3'); 
}); 

該路由器創建以下路線:

  • parent.index
  • parent.child1
  • parent.child2
  • parent.child3

下面是我的模板(簡體)

<script type="text/x-handlebars" data-template-name="application"> 
{{outlet}} 
</script> 

<script type="text/x-handlebars" data-template-name="parent"> 
    <h1>{{title}}</h1> 

    Common html 

    {{outlet}} 
</script> 

<script type="text/x-handlebars" data-template-name="parent/index"> 
    Parent specific content 
</script> 

<script type="text/x-handlebars" data-template-name="parent/child1"> 
    Child 1 specific content 
</script> 

<script type="text/x-handlebars" data-template-name="parent/child2"> 
    Child 2 specific content 
</script> 

<script type="text/x-handlebars" data-template-name="parent/child3"> 
    Child 3 specific content 
</script> 

這裏是我的控制器

App.ParentController = Ember.Controller.extend({ 
    title: 'Parent Title' 
}); 

App.ParentIndexController = Ember.Controller.extend({ 
    title: 'Parent Index Title' 
}); 

App.Child1Controller = Ember.Controller.extend({ 
    title: 'Child 1 Title' 
}); 

App.Child2Controller = Ember.Controller.extend({ 
    title: 'Child 2 Title' 
}); 

App.Child3Controller = Ember.Controller.extend({ 
    title: 'Child 3 Title' 
}); 

如何更新內部模板= 「父」 當我是{{title}}的屬性在孩子控制器裏面? 我試過這樣的東西

App.Child3Controller = Ember.Controller.extend({ 
    needs: ['parent'], 
    init: function() { 
    this.get('controllers.parent').set('title', 'Child 3 Title'); 
    } 
}); 

但我沒有更新父模板。那麼我怎麼做到這一點?

+0

我的答案是否爲你工作? – intuitivepixel

回答

3

好的,編輯我的回答您的評論之後,你所面臨的問題是,initChild3Controller不是叫你需要它的時候,所以這個工作,你應該做你的parent.child3路線setupController鉤:

App.ParentChild3Route = Ember.Route.extend({ 
    setupController: function(controller, model) { 
    // the Ember.run.later is not necessary and is only to simulate a delay 
    // so you can actually see the title change, it would be actually 
    // just fine to call this.controllerFor('parent').set('title', 'Child 3 Title'); 
    // directly when the setupController hook is invoked 
    Ember.run.later(this, function() { 
     this.controllerFor('parent').set('title', 'Child 3 Title'); 
    }, 1500); 
    } 
}); 

我也重定向到parent.child3路線從index路線,使setupController鉤居然火,但是這可以通過簡單地導航到parent.child3路線以任何其他方式也發生了:

App.IndexRoute = Ember.Route.extend({ 
    afterModel: function() { 
    this.transitionTo('parent.child3'); 
    } 
}); 

所以得出結論,改變控制器中的值應該在控制器相應路由的setupController鉤子中完成。

我試圖在一個簡單的demo模擬這個,看看。

希望它有幫助。

+0

我試過了。對不起,我會更新代碼 – cocheese

+0

請檢查此[演示](http://jsbin.com/IxOsERE/1/edit) – seenivasan

+0

夥計們感謝所有的答覆! 你們給了我一個想法,它解決了我的問題:) 看看這裏http://jsbin.com/AhOT/3/ 正如你可以看到我了另一種方式來解決這個問題;) – cocheese

0

夥計們感謝所有答覆!你們給了我一個主意,它解決了我的問題:)看看這裏jsbin.com/AhOT/3正如你可以看到我採取另一種方式來解決它;)