2012-10-03 57 views
4

有沒有一種方法,當你渲染幾次來看,有他們每個控制器的一個實例相關聯?如何管理具有獨立渠道的意見集合?

很確定這不是正確的做法,所以我很樂意接受我應該怎麼做。但這裏是用例:

我有這些路線:

FormBuilder.Router = Ember.Router.extend({ 
    // ... 
    form: Ember.Route.extend({ 
    route: '/form/:form_id/edit', 
    connectOutlets: function (router, form) { 
     router.get('applicationController').connectOutlet('editForm', form); 
     router.get('editFormController').connectOutlet('fieldsList', form.get('fields')); 
    }, 

    editField: Ember.Route.transitionTo('editOneField'), 
    showField: Ember.Route.transitionTo('showOneField'), 

    initialState: 'showOneField', 
    editOneField: Ember.Route.extend({ 
     connectOutlets: function (router, field) { 
     router.get('fieldsListController').connectOutlet('editField', field); 
     } 
    }), 
    showOneField: Ember.Route.extend({ 
     connectOutlets: function (router, field) { 
     router.get('fieldsListController').connectOutlet('showField', field); 
     } 
    }) 
    }) 
}); 

我想列出Field S IN一Formform路線。該Route這是:

form: Ember.Route.extend({ 
    route: '/form/:form_id/edit', 
    connectOutlets: function (router, form) { 
     router.get('applicationController').connectOutlet('editForm', form); 
     router.get('editFormController').connectOutlet('fieldsList', form.get('fields')); 
    }, 

EditFormView渲染模板edit_form_view

<h2>Editing form {{id}}</h2> 

{{view FormBuilder.AddFormFieldsView}} 

{{ outlet }} 

在我們的outlet連接到fieldsList。這呈現fields_list模板,並連接到FieldsListController控制器,該控制器是一個數組Field

{{! fields_list.handlebards }} 
<p>The form fields</p> 

<ul> 
{{#each content}} 
    {{view FormBuilder.FieldView}} 
{{/each}} 
</ul> 

因此,這使得它使用field_view模板視圖FieldView

# {{publicName}} 

{{outlet}} 

而這正是我有一個問題。我無法真正「連接」這個outlet,因爲它是fieldsListController的一部分。

我將描述我嘗試做的事情。我在我的控制器中有這個。

editField: Ember.Route.transitionTo('editOneField'), 
showField: Ember.Route.transitionTo('showOneField'), 

initialState: 'showOneField', 
editOneField: Ember.Route.extend({ 
    connectOutlets: function (router, field) { 
    router.get('fieldsListController').connectOutlet('editField', field); 
    } 
}), 
showOneField: Ember.Route.extend({ 
    connectOutlets: function (router, field) { 
    router.get('fieldsListController').connectOutlet('showField', field); 
    } 
}) 

這意味着,渲染視圖,在field_view.handlebarsoutlet將與showField連接:

<pre>show a field yo :)</pre> 

<a {{action editField this}}>(edit)</a> 

如果我只有一個字段,並單擊(edit),就會切換連接outleteditField,這是迄今爲止我想要做的。但是,如果我的Form中有多個Field,當我按(edit)時,它將所有outlet s連接到editField

它使因爲這router.get('fieldsListController').connectOutlet('showField', field);的感覺,但我不知道如何獲得一個控制器的正確實例(和/或每個FieldView S的創建一個控制器的一個實例。

我我正在嘗試在不改變整個視圖的情況下進行「內聯版」,它似乎不是一個好的文檔/教程,關於擁有獨立的視圖集合outlet ...

指向整個代碼庫和在線實時版本的鏈接位於頁面頂部。

回答

0

您可能正在尋找{{control}}助手,該助手正在開發中,但可通過Ember.js source code訪問。這個幫手的設計是爲了讓實例化一個控制器這個幫助器的每個用途。