2012-04-10 48 views
4

我讀過Ember.js文檔+示例,並且使用綁定嵌套視圖讓我有點困惑。在Ember.js中聲明綁定的正確方法

我有以下簡稱HTML(工作正常):

{{#view App.outerArea}} 
    {{#view innerArea}} 
     {{view Ember.TextField valueBinding="parentView.parentView.bound.username"}} 
    {{/view}} 
{{/view}} 

...和JavaScript(也工作正常):

App = Ember.Application.create(); 
App.outerArea = Ember.View.extend({ 
    bound : { 
     username:'test', 
    }, 
    innerArea: Ember.View.extend({}), 
}); 

(如果我從HTML刪除innerArea我可以刪除 'parentView.parentView。' 完全)

要清理乾淨了,我已經試過:

... 
{{view Ember.TextField valueBinding="bound.username"}} 
... 
innerArea: Ember.View.extend({ 
    bound: function() { 
     return App.outerArea.bound; 
    } 
}) 

並試圖:

{{view Ember.TextField valueBinding="getPath(bound.username)"}} // with above bound: function(). 

還有一些其他的組合,但他們沒有在所有的工作。

還有更多優雅從TextField的valueBinding引用'parentView.parentView.bound.username'的方法嗎?是否有不止一種方法?什麼是這種事最好的設計模式?

謝謝!

回答

2

首先,在原始示例中,您只需要一個parentView來綁定文本字段的值(請參閱http://jsfiddle.net/MikeAski/tkDp6/

其次,您需要定義bound在內部視圖結合的方式並不好:你應該嘗試:

... 
innerArea: Ember.View.extend({ 
    boundBinding: 'parentView.bound' 
}) 

(見http://jsfiddle.net/MikeAski/tkDp6/2/

+0

非常感謝你的回覆。我有上面的代碼parentView.parentView肯定是在一個孤立的項目本地工作。 (我非常小心!)但顯然你的小提琴代碼也在工作!我的ember.js可能已經老了。我會檢查。編輯:是的,我在0.9.2上。我更新到0.9.6,現在它工作正常。 – shs 2012-04-11 18:05:52

+0

因此,在Ember 0.9.6中,我在上面的TextField的同一級別添加了一個按鈕。並且該按鈕需要parentView.parentView的目標。這看起來很奇怪嗎? http://jsfiddle.net/K2v54/1/ – shs 2012-04-11 18:30:17

+0

這很正常:按鈕視圖位於'outerArea'視圖內的'innerArea'視圖內,因此要從按鈕視圖範圍調用'outerArea.submitLogin',我們需要上兩次:首先獲得'innerArea'的作用域,並再次獲得'outerArea'的作用域。 – 2012-04-12 07:53:40