2015-05-25 1 views
0

Привет Я работаю на форме, используя emberJS и это мой контроллер ApplicationЗахват нескольких значений TextBox в контроллере с помощью Ember View

App = Ember.Application.create(); 

App.ApplicationController = Ember.Controller.extend({ 
    appName: 'Tag Editor', 
    arrayVal : ['A', 'B', 'C', 'F', 'X'], 
    actions: { 
    formSubmit: function() { 
     console.log(this.get('views')); 
    } 
    } 
}); 

И мои шаблоны, которые я использую шаблон приложения приложения, а также на основе массива, указанного в ApplicationController emberview будет оказана в соответствии с App.TextView

<script type="text/x-handlebars" data-template-name="application"> 
    <div {{bind-attr class=":appName"}}><h1>{{appName}}</h1></div> 
    {{#each arrayVal}} 
    <div> 
     {{view App.TextView entity=this}} 
    </div> 
    {{/each}} 
    <div> 
    <button {{action 'formSubmit'}}>Submit</button> 
    </div> 
</script> 

// приведенный выше шаблон будет оказывать все текстовые поля в шаблоне согласно шаблону сильфона,

// Мой TextBoxView будет содержать 2 текстовых полей ПгвЬЫате и LastName

<script type="text/x-handlebars" data-template-name="myentity-view"> 
    <div class="appTitle">{{input type=text value=firstName}}</div> 
    <div class="appTitle">{{input type=text value=lastName}}</div> 
</script> 

вид выше шаблона

App.TextView = Ember.View.extend({ 
     templateName: 'myentity-view' 
    }); 

Это будет работать нормально, оказывая все мнения TextBox в шаблонах приложений каждым Helper и динамически создавая все виды

// Но для меня в каждом представлении я хочу захватить все записи firstName и lastName пользователя, нажав кнопку formSubmit в applicationController.

В текущем сценарии длина моего массива равна 5 и будет динамически создавать 5 текстовых элементов в соответствии с моим кодом. и в каждом TextView есть firstName и lastName, как я могу захватить все firstName и lastNames в действии контроллера.

ответ

0

Вы можете получить доступ к представлениям с помощью this.get('childViews'). Вы можете фильтровать результат с помощью некоторого уникального свойства в TextView, чтобы другие дочерние элементы игнорировались. Затем вы в основном сопоставляете весь массив и возвращаете firstName и lastName.

formSubmit: function() { 
    var values = this.get('childViews') 
    .filterBy('templateName', 'myentity-view') 
    .map(function(item) { 
     return { 
     firstName: item.get('firstName'), 
     lastName: item.get('lastName') 
     }; 
    }); 
} 

Here is a working demo.

Смежные вопросы