2012-02-08 55 views
2

我已經開始看到燼js,但我有問題讓我的頭周圍的視圖 - 模板部分,如果我想要一個文本框來觸發一個創建事件這很簡單我使用在Ember.TextField視圖上插入NewNewline函數,但是大多數Web應用程序都需要一個表單來填寫並在按下按鈕時提交,我無法看到工作的視圖上有多個文本輸入框。Ember js多文本框的形式

我跟着git hub https://github.com/mikecrittenden/tangletube上的例子,但他似乎直接從視圖中引用DOM元素,而不是綁定到視圖的屬性。

有沒有人有一個使用多文本字段形式的桉樹項目的例子。

關於旁註:開發ember應用程序似乎沒有標準結構,我看過的每個示例都完全不同。

回答

3

這裏是展示在一個視圖中使用多個文本字段的兩種方法很簡單的例子:http://jsfiddle.net/tomwhatmore/HEaGm/

第一個使用viewName,它允許使用this.get('whateverYouPutAsViewName')他們每個人的看法接入綁定的文本框,以他們的觀點。

第二個通過使用valueBinding將文本字段的值直接綁定到Ember對象。對字段所做的任何更改都會自動更新對象。

兩者都有一個按鈕,觸發一個簡單的動作,使用這些值來顯示它們在視圖中的訪問方式。希望代碼是不言自明的。

HTML:

<script type="text/x-handlebars"> 
    {{#view App.HelloView}} 
     {{view Ember.TextField viewName="firstName" placeholder="first name"}} 
     {{view Ember.TextField viewName="lastName" placeholder="last name"}} 
     <button {{action "hello"}}>Say Hello</button> 
    {{/view}} 

    {{#view App.BoundView}} 
     {{#with person}} 
      {{view Ember.TextField valueBinding="firstName"}} 
      {{view Ember.TextField valueBinding="lastName"}} 
     {{/with}} 
     <button {{action "hello"}}>Say Hello</button> 
    {{/view}} 
</script> 

JS:

App = Ember.Application.create() 

App.HelloView = Ember.View.extend({ 
    hello: function() { 
     alert("Hello " + this.get('firstName').get('value') + " " + this.get('lastName').get('value')); 
    } 
}); 

App.Person = Ember.Object.create({ 
    'firstName': 'John', 
    'lastName': 'Doe', 

    fullName: function() { 
     return this.get('firstName') + ' ' + this.get('lastName'); 
    }.property('firstName', 'lastName') 
}); 

App.BoundView = Ember.View.extend({ 
    personBinding: 'App.Person', 

    hello: function() { 
     alert("hello " + this.get('person').get('fullName')); 
    } 
}) 
+0

感謝,正是我一直在尋找,現在是有道理的。如果我把控制器放在視圖和模型之間,它只是從視圖動作中調用控制器的一種情況,這是做這件事的正確方法,或者也可以通過綁定來完成。 – user655261 2012-02-08 16:29:51

+0

@ user655261您可以完全相同的方式將控制器綁定到視圖,例如, 'peopleBinding:「App.peopleController」'。然後在視圖中,您通常會使用「{{#each}}」塊來遍歷該控制器。例如'{{#每個人}} {{全名}} {{/每個}}' – 2012-02-09 11:35:31