2015-01-16 2 views
0

Как заставить повторно отобразить пользовательский вид текстового поля?принудительное повторное отображение пользовательского текстового поля

я создаю:

App.Select2View = Ember.TextField.extend({didInsertElement:function() {//plugin called here}}); 

Она включена в виде шаблона и когда форма открыта, и я выбираю другой/другой элемент, этот вид пользовательских TextField (на основе выбора 2) не повторно но остается неизменным.

У меня есть вложенные маршруты/ресурсы. Компания под компаниями. Когда я выбираю компанию, у меня есть кнопка «Только для чтения» и кнопка «Редактировать», которая, если щелкнуть, вызывает действие на контроллере Компании в состоянии «isEditing», в этом состоянии форма открыта. Если я изменю состояние на false, оно вернется к модели только для чтения (просмотр информации о компании).

Это нормально, если я сначала вернул его в режим только для чтения, а затем открыл другой элемент, а select2 - с данными этих компаний.

Но если он находится в состоянии isEditing, с открытой формой и я перехожу к другому элементу компании, все поля ввода формы меняются в соответствии с моделью (например, имя будет меняться, потому что оно привязано к значению ключевого значения модели компании) но select2 остается прежним.

Я не уверен, как переделать это в Ember.

Это определяется как парциальное в шаблоне под основным видом шаблона компании:

<script type="text/x-handlebars" id="company/_edit"> 
    <p>{{input type="text" value=name}}</p> 
    <p> 
     {{view "select2" 
     prompt="Search for companies" 
     resource="results" 
     displayKey="text" 
     onSelect="addCompany" 
     onDeSelect="removeCompany" 
     }} 
    </p> 
</script> 

Все указатели оценили.

+0

Можете ли вы создать провал? Это люди ответят на ваш вопрос. emberjs.jsbin.com – blessenm

+0

уверен, но это должно быть приостановлено, поскольку я столкнулся с другими проблемами, которые могут быть частью проблемы. если я проясню это, я опубликую jsbin. в основном моя проблема заключается в том, что когда я нажимаю на другой элемент в состоянии «edit», форма отображает для этого элемента данные с заполненными данными, но select2 не перезаписывает. То, что я сделал временно, чтобы решить это, - добавить метод «beforeModel» в CompanyRoute и выполнить: this.controllerFor («компания»). Send ('cancel'), который отменяет состояние редактирования: this.set ('isEditing ', правда); для отмены в хеше действий на CompanyController. –

+0

, а затем, когда я нажимаю на кнопку редактирования, она отобразит вид формы с выделенным select2. –

ответ

0

Я новичок в Ember, и мой ответ может быть нецелесообразным, но, основываясь на моих экспериментах, проблема в том, что Ember кэширует как можно больше. Таким образом, он не будет полностью отображать представление с помощью select2, только если представление находится в определенном состоянии, предыдущее состояние, за которым следуют следующее состояние, будет автоматически повторно рендерить.

Решение, по-видимому, теперь заключается в том, чтобы добавить метод valueChange с наблюдателем на «значение» на пользовательском TextField select2 и сделать тот же вызов, что и в «didInsertElement» (который выполняется при визуализации представления) :

valueChange: function() { 
    Ember.run.scheduleOnce('afterRender', this, 'setupSelect2'); 
}.observes('value'), 

Теперь, даже если я нахожусь в «изменить» состояние, он будет обновлять это ВЫБ.2, а также, не только стандартные формы входы привязанные специально для этой модели. Теперь я могу перейти к любому элементу в состоянии «edit», который имеет форму, открытую для каждого выбранного элемента, и значения соответственно изменяются в select2.

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